如何根据python中的另一列填充NA值

时间:2021-07-29 08:00:56

标签: python pandas dataframe

我在 python 中有一个数据框,我想根据另一列填充 NA 值

<头>
姓名 班级
AB 第六个
MN 第九个
二维码 NaN
AB NaN
MN 第九个
TS 第二个
AB 第六个
TS NaN
MN NaN
NaN NaN
二维码 第一次
TS 第二个
NaN 第六个
NaN 第九个
NaN 第一次

我想填充两个列的 NA 值

如果名字是AB,那么班级应该是Sixth,反之亦然
如果名称为 QR,则该类应为 First,反之亦然

等等等等... 此外,如果两列都有 NULL 字段,那么它将保持 NULL (什么都不会改变,因为稍后我将用模式填充那些 NA 字段)。
注意:实际问题有所不同,但它需要相同的逻辑,因为我无法在此处发布该问题。

1 个答案:

答案 0 :(得分:3)

如果我理解正确,您可以创建映射字典并在 .map 中使用它来填充 NaN 值:

mapping = df.dropna().drop_duplicates().set_index("Name")["Class"].to_dict()
inv_mapping = {v: k for k, v in mapping.items()}

df.loc[df["Name"].isna(), "Name"] = df.loc[df["Name"].isna(), "Class"].map(
    inv_mapping
)
df.loc[df["Class"].isna(), "Class"] = df.loc[df["Class"].isna(), "Name"].map(
    mapping
)

print(df)

打印:

   Name   Class
0    AB   Sixth
1    MN   Ninth
2    QR   First
3    AB   Sixth
4    MN   Ninth
5    TS  Second
6    AB   Sixth
7    TS  Second
8    MN   Ninth
9   NaN     NaN
10   QR   First
11   TS  Second
12   AB   Sixth
13   MN   Ninth
14   QR   First