我在 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 字段)。
注意:实际问题有所不同,但它需要相同的逻辑,因为我无法在此处发布该问题。
答案 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