【问题标题】:python - Pandas - FillNa with another non null row having similar columnpython - Pandas - FillNa 与另一个具有相似列的非空行
【发布时间】:2017-02-07 23:07:55
【问题描述】:

我想用另一列的值填充一列中的缺失值。

我读到循环遍历每一行是非常糟糕的做法,最好一次完成所有事情,但我不知道如何使用 fillna 方法。

之前的数据

Day  Cat1  Cat2
1    cat   ant
2    dog   elephant
3    cat   giraf
4    NaN   ant

之后的数据

Day  Cat1  Cat2
1    cat   ant
2    dog   elephant
3    cat   giraf
4    cat   ant

【问题讨论】:

    标签: python pandas numpy jupyter-notebook


    【解决方案1】:

    您可以使用fillna 并传递不带NaN 行的df,将索引设置为Cat2,然后调用map 将执行查找:

    In [108]:
    df['Cat1'] = df['Cat1'].fillna(df['Cat2'].map(df.dropna().set_index('Cat2')['Cat1']))
    df
    
    Out[108]:
       Day Cat1      Cat2
    0    1  cat       ant
    1    2  dog  elephant
    2    3  cat     giraf
    3    4  cat       ant
    

    所以我在这里删除NaN 行,并将索引设置为Cat2,通过在此调用map 它将查找Cat1values whereCat2` 匹配

    这是map的结果:

    In [112]:
    df['Cat2'].map(df.dropna().set_index('Cat2')['Cat1'])
    
    Out[112]:
    0    cat
    1    dog
    2    cat
    3    cat
    Name: Cat2, dtype: object
    

    【讨论】:

    • 明智的解决方案。但如果 Cat2 不是唯一的,则不起作用。我建议在dropna() 之后做drop_duplicates("Cat2")
    猜你喜欢
    • 2023-02-13
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 2022-07-27
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多