combine_first 的想法是正确的,但需要先通过 set_index 对齐索引:
import pandas as pd, numpy as np
df1 = pd.DataFrame({'Group': ['A', 'A', 'A', 'B', 'B', 'B'],
'Key': ['AA1', 'AB2', 'AC3', 'BD4', 'BE5', 'BF6'],
'Value1': [np.nan, 20, 40, 60, np.nan, np.nan],
'Value2': [np.nan, 30, 50, 23, np.nan, np.nan]})
df2 = pd.DataFrame({'Key': ['AA1', 'BE5', 'BF6'],
'Value1': [66, 20, 21],
'Value2': [33, 60, 70]})
res = df1.set_index('Key').combine_first(df2.set_index('Key')).reset_index()
print(res)
Key Group Value1 Value2
0 AA1 A 66 33
1 AB2 A 20 30
2 AC3 A 40 50
3 BD4 B 60 23
4 BE5 B 20 60
5 BF6 B 21 70