组合列值匹配的两个数据帧

2024-10-01 15:42:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个包含类似列的数据帧:

  ID  prop1
1 UUU &&&
2 III ***
3 OOO )))
4 PPP %%%

  ID  prop2
1 UUU 1234 
2 WWW 4567
3 III 7890
5 EEE 0123
6 OOO 3456
7 RRR 6789
8 PPP 9012

我需要在ID匹配的地方合并这两个数据帧,并将prop2列添加到原始数据帧中

  ID  prop1 prop1
1 UUU &&&   1234
2 III ***   7890
3 OOO )))   3456
4 PPP %%%   9012

我尝试了merge、join、concat、for、iter等各种组合。它要么无法合并,要么丢失索引,要么直接删除列值


Tags: 数据id原始数据www地方mergeuuuiii
2条回答

您可以使用^{}

pd.merge(df1, df2, on='ID')

输出:

    ID prop1  prop2
0  UUU   &&&   1234
1  III   ***   7890
2  OOO   )))   3456
3  PPP   %%%   9012

您还可以按如下方式使用^{}

df1.merge(df2, on='ID')

同样的结果

无论使用pd.merge()还是df.merge().merge()上的默认参数是how='inner'。因此,您已经在执行内部联接,而没有指定how=参数

更复杂的情况:

如果需要更复杂的情况来维护df1{}的索引而不是0, 1, 2, 3,可以在合并之前重置索引,然后在重置索引时生成的临时index列上设置索引:

df1.reset_index().merge(df2, on='ID').set_index('index')

输出:

        ID prop1  prop2
index                  
1      UUU   &&&   1234
2      III   ***   7890
3      OOO   )))   3456
4      PPP   %%%   9012

现在,保留原始df1的索引1 2 3 4

或者,如果不希望轴标签index出现在行索引的顶部,可以按如下方式执行^{}

df1.reset_index().merge(df2, on='ID').set_index('index').rename_axis(index=None)

输出:

        ID prop1  prop2
1      UUU   &&&   1234
2      III   ***   7890
3      OOO   )))   3456
4      PPP   %%%   9012

您还可以使用.map将prop2值添加到原始数据帧中,其中ID列值匹配

df1['prop2'] = df1['ID'].map(dict(df2[['ID', 'prop2']].to_numpy())

如果原始数据帧中有任何ID不在第二个数据帧中(因此没有prop2值),可以通过添加.fillna()来填补这些漏洞

df1['prop2'] = df1['ID'].map(dict(df2[['ID', 'prop2']].to_numpy()).fillna(your_fill_value_here)

相关问题 更多 >

    热门问题