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

时间:2018-07-18 06:05:57

标签: python pandas dataframe

我有两个类似的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可能会有所帮助,但我有些困惑。

谢谢

1 个答案:

答案 0 :(得分: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