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.merge或pd.concat可能有所帮助,但我有点困惑。
谢谢
您可以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)