Pandas -合并 Dataframe 以保留左侧的所有值,如果“左侧无关键字”,则从右侧“插入”值,否则“更新”左侧的现有“关键字”

6l7fqoea  于 2023-02-17  发布在  其他
关注(0)|答案(3)|浏览(223)

我有两个 Dataframe df1和df2。

np.random.seed(0)
df1= pd.DataFrame({'key': ['A', 'B', 'C', 'D'],'id': ['2', '23', '234', '2345'], '2021': np.random.randn(4)})
df2= pd.DataFrame({'key': ['B', 'D', 'E', 'F'], 'id': ['23', '2345', '67', '45'],'2022': np.random.randn(4)})

  key    id      2021
0   A     2  1.764052
1   B    23  0.400157
2   C   234  0.978738
3   D  2345  2.240893

  key    id      2022
0   B    23  1.867558
1   D  2345 -0.977278
2   E    67  0.950088
3   F    45 -0.151357

我想有唯一的关键字。如果关键字已经找到,只是更新关键字,否则插入新行。我不知道我是否必须使用合并/concat/联接。有人能给这个洞察力吗?
注意:我使用了完全外部连接,它返回重复的列。在发布问题后编辑了输入 Dataframe 。
谢谢!

11dmarpk

11dmarpk1#

根据您的描述,看起来您需要combine_first。它将通过按顺序替换重复项来合并两个数据集。

df2.set_index('key'). combine_first(df1.set_index('key')).reset_index()

输出:

key      2021      2022
0   A  1.764052       NaN
1   B  0.400157  1.867558
2   C  0.978738       NaN
3   D  2.240893 -0.977278
4   E       NaN  0.950088
5   F       NaN -0.151357
ego6inou

ego6inou2#

您可以使用合并功能:

df = df1.merge(df2, on='key', how='outer')

df
   key     2021    2022
0   A   1.764052    NaN
1   B   0.400157    1.867558
2   C   0.978738    NaN
3   D   2.240893    -0.977278
4   E   NaN         0.950088
5   F   NaN        -0.151357
    • 编辑**

如果您还需要合并"id":

df = df1.merge(df2, on=['key','id'], how='outer')

key id  2021    2022
A   2   1.764052    NaN
B   23  0.400157    1.867558
C   234 0.978738    NaN
D   2345    2.240893    -0.977278
E   67  NaN 0.950088
F   45  NaN -0.151357
ix0qys7i

ix0qys7i3#

我认为您需要从key创建索引,然后加入concat

df = pd.concat([df1.set_index('key'), df2.set_index('key')], axis=1).reset_index()
print (df)
  key      2021      2022
0   A  1.764052       NaN
1   B  0.400157  1.867558
2   C  0.978738       NaN
3   D  2.240893 -0.977278
4   E       NaN  0.950088
5   F       NaN -0.151357

相关问题