如何仅填充与另一组列中的行值匹配的列?

问题描述 投票:0回答:1

我正在尝试迭代数据帧的子集,并查看行中的值是否与主 df 中的列标题匹配。在下面的示例中,我减少了列数,但在真实数据集中有 20 多个随机列。

示例 df-

示例 df

我希望输出看起来像这样-

理想输出

重要的是要注意,开始时列的顺序并不总是相同,它可能会改变并变得或多或少。

我尝试过 for 循环和 iterrows() 但我无法获取行值并将其与稍后的列列表进行比较 (list = ['a','b','c','d '])。

列的顺序也不会统一,因此不能保证“1”与“a”匹配。它需要迭代所有行和所有列,以查看是否有任何一行与任何一列名称匹配。

python dataframe loops
1个回答
0
投票

以下内容可能可以回答您的问题:

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
© www.soinside.com 2019 - 2024. All rights reserved.