【问题标题】:Update a pandas dataframe with data from another dataframe使用来自另一个数据帧的数据更新熊猫数据帧
【发布时间】:2018-12-25 22:32:18
【问题描述】:

我有两个相似的 DataFrame。

df1.head()
        1        2        3      4
3234    Lorum    Ipsum    Foo    Bar
8839    NaN      NaN      NaN    NaN
9911    Lorum    Ipsum    Bar    Foo
2256    NaN      NaN      NaN    NaN

df2.head()
        1        3        4
8839    Lorum    Ipsum    Foo
2256    Lorum    Ipsum    Bar

我想基于相同的索引和列合并/更新两者以更新 NaN​​ 值。

理想的结果:

df3.head()
        1        2        3      4
3234    Lorum    Ipsum    Foo    Bar
8839    Lorum    NaN      Ipsum  Foo
9911    Lorum    Ipsum    Bar    Foo
2256    Lorum    NaN      Ipsum  Bar

df2 不包含 df1 那样的所有列,但它包含的列匹配并且具有匹配的索引。

我试过了:

df3 = df1.update(df2)

但是没有任何成功。我一直在查看文档并认为 pd.mergepd.concat 可能会有所帮助,但我有点困惑。

谢谢

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您可以将combine_firstreindex 一起使用:

    df3 = df2.combine_first(df1).reindex(df1.index)
    print (df3)
              1      2      3    4
    3234  Lorum  Ipsum    Foo  Bar
    8839  Lorum    NaN  Ipsum  Foo
    9911  Lorum  Ipsum    Bar  Foo
    2256  Lorum    NaN  Ipsum  Bar
    

    或者使用您的解决方案,但 update 就地工作,所以如果分配给变量它返回 None

    df1.update(df2)
    print (df1)
              1      2      3    4
    3234  Lorum  Ipsum    Foo  Bar
    8839  Lorum    NaN  Ipsum  Foo
    9911  Lorum  Ipsum    Bar  Foo
    2256  Lorum    NaN  Ipsum  Bar
    
    print (df1.update(df2))
    None
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-31
      • 1970-01-01
      • 2020-09-20
      • 2016-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多