【问题标题】:How to fill the NA values based on another column in python如何根据python中的另一列填充NA值
【发布时间】:2021-07-29 16:53:49
【问题描述】:

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

Name Class
AB Sixth
MN Ninth
QR NaN
AB NaN
MN Ninth
TS Second
AB Sixth
TS NaN
MN NaN
NaN NaN
QR First
TS Second
NaN Sixth
NaN Ninth
NaN First

我想为两个列填充 NA 值

如果名称是 AB,那么该类应该是 Sixth,反之亦然
如果名称是 QR,那么类应该是 First,反之亦然

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

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    如果我对你的理解正确,你可以创建映射字典并在.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
    

    【讨论】:

    • 非常感谢@Andrej Kesely。有效。我也在使用映射,但在这方面犯了一个错误。再次感谢您以如此简单的方式解释
    • @RajatArora 如果答案解决了您的问题,请接受 - 请参阅 What should I do when someone answers my question?
    猜你喜欢
    • 1970-01-01
    • 2020-10-08
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    • 2021-03-16
    • 1970-01-01
    • 2020-02-17
    • 1970-01-01
    相关资源
    最近更新 更多