我有两个类似的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.merge
或pd.concat
可能会有所帮助,但我有些困惑。
谢谢
答案 0 :(得分:1)
您可以将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
或者使用您的解决方案,但是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