【问题标题】:pandas function to fill missing values from other dataframe based on matching column?熊猫函数根据匹配列填充其他数据框中的缺失值?
【发布时间】:2016-10-31 10:02:08
【问题描述】:

所以我有两个数据框:一个填充了某些列,一个填充了其他列,但缺少前一个 df 中的一些。两者共享一些共同的非空列。

DF1:
FirstName Uid JoinDate BirthDate
      Bob   1 20160628       NaN
  Charlie   3 20160627       NaN

DF2:
FirstName Uid JoinDate BirthDate
      Bob   1      NaN  19910524
    Alice   2      NaN  19950403

Result:
FirstName Uid JoinDate BirthDate
      Bob   1 20160628  19910524
    Alice   2      NaN  19950403
  Charlie   3 20160627       NaN

假设这些行在它们各自的数据帧中不共享索引位置,有没有办法可以用 DF2 中的值填充 DF1 中的缺失值,其中行在某个列上匹配(在本例中为 Uid)?

此外,如果该列(例如 Uid)不匹配,是否有一种方法可以在 DF1 中从 DF2 创建一个新条目,而不删除 DF1 中与 DF2 中的任何行不匹配的行?

编辑:我更新了数据帧以在结果 df 中需要的两个数据帧中添加不匹配的结果。我还更新了我的最后一个问题以反映这一点。

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:

    更新:您可以设置正确的索引,最后重置加入的 DF 的索引:

    In [14]: df1.set_index('FirstName').combine_first(df2.set_index('FirstName')).reset_index()
    Out[14]:
      FirstName  Uid    JoinDate   BirthDate
    0     Alice  2.0         NaN  19950403.0
    1       Bob  1.0  20160628.0  19910524.0
    2   Charlie  3.0  20160627.0         NaN
    

    试试这个:

    In [113]: df2.combine_first(df1)
    Out[113]:
      FirstName  Uid    JoinDate  BirthDate
    0       Bob    1  20160628.0   19910524
    1     Alice    2         NaN   19950403
    

    【讨论】:

    • 这几乎正是我正在寻找的,但是如果 DF1 中有一行与 DF2 中的任何行都不匹配,它们就会被淘汰。我更新了我原来的问题,以更好地反映我在寻找什么。
    • 完美!这正是我想要的!
    猜你喜欢
    • 2018-03-13
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    相关资源
    最近更新 更多