一种方法是使用combine_first https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.combine_first.html:
df2.combine_first(df1)
Output:
A B C D
1 A1 B1 C1 NaN
2 A2 B2 C2 NaN
3 A3 B3 NewC NewD
4 A4 B4 C4 NaN
另一种方法是使用join
with fillna
:
df1[['A','B']].join(df2).fillna(df1)
Output:
A B C D
1 A1 B1 C1 NaN
2 A2 B2 C2 NaN
3 A3 B3 NewC NewD
4 A4 B4 C4 NaN
第三种方式,
df1a = df1.reindex(df1.columns.union(df2.columns), axis=1)
df1a.update(df2)
df1a
Timings:
%%timeit pd.concat((df1,df2),sort=False).groupby(level=0).last()
每个循环 4.56 ms ± 947 µs(7 次运行的平均值 ± 标准差,每次 100 个循环)
%%timeit
df1a = df1.reindex(df1.columns.union(df2.columns), axis=1)
df1a.update(df2)
df1a
每个循环 2.93 ms ± 133 µs(7 次运行的平均值 ± 标准差,每次 100 个循环)
%timeit df1[['A','B']].join(df2).fillna(df1)
每个循环 5.2 ms ± 89.7 µs(7 次运行的平均值 ± 标准差,每次 100 个循环)
%timeit df2.combine_first(df1)
每个循环 5.37 ms ± 127 µs(7 次运行的平均值 ± 标准差,每次 100 个循环)