我正在尝试迭代数据帧的子集,并查看行中的值是否与主 df 中的列标题匹配。在下面的示例中,我减少了列数,但在真实数据集中有 20 多个随机列。
示例 df-
我希望输出看起来像这样-
重要的是要注意,开始时列的顺序并不总是相同,它可能会改变并变得或多或少。
我尝试过 for 循环和 iterrows() 但我无法获取行值并将其与稍后的列列表进行比较 (list = ['a','b','c','d '])。
列的顺序也不会统一,因此不能保证“1”与“a”匹配。它需要迭代所有行和所有列,以查看是否有任何一行与任何一列名称匹配。
以下内容可能可以回答您的问题:
import pandas as pd
df = pd.DataFrame(
{
"1": ["a", "a", "a", None],
"2": ["b", None, "b", None],
"3": ["impact", "a", None, None],
"4": [None, "d", None, "d"],
"a": [pd.NA, pd.NA, pd.NA, pd.NA],
"b": [pd.NA, pd.NA, pd.NA, pd.NA],
"c": [pd.NA, pd.NA, pd.NA, pd.NA],
"d": [pd.NA, pd.NA, pd.NA, pd.NA],
}
)
df["a"] = df["1"].apply(lambda x: "x" if x == "a" else pd.NA)
df["b"] = df["2"].apply(lambda x: "x" if x == "b" else pd.NA)
df["c"] = df["3"].apply(lambda x: "x" if x == "c" else pd.NA)
df["d"] = df["4"].apply(lambda x: "x" if x == "d" else pd.NA)
print(df)
# 1 2 3 4 a b c d
# 0 a b impact None x x <NA> <NA>
# 1 a None a d x <NA> <NA> x
# 2 a b None None x x <NA> <NA>
# 3 None None None d <NA> <NA> <NA> x