使用来自另一个数据帧的数据更新熊猫数据帧

Dan*_*rke 5 python dataframe pandas

我有两个类似的 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
Run Code Online (Sandbox Code Playgroud)

我想根据相同的索引和列合并/更新两者以更新 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
Run Code Online (Sandbox Code Playgroud)

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

我试过这个:

df3 = df1.update(df2)
Run Code Online (Sandbox Code Playgroud)

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

谢谢

jez*_*ael 3

您可以combine_first使用reindex

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
Run Code Online (Sandbox Code Playgroud)

或者使用您的解决方案,但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
Run Code Online (Sandbox Code Playgroud)