如果我有3行df:
name | id | price
---------------------------
AG | 102984 | 40
TY | 847574 | 90
RE | 213441 | 30
且df2只有2行(请注意,它们可以与df具有相同的ID,但并非总是如此,每个名称都是BB)
name | id | price
---------------------------
BB | 102984 | 50
BB | 847574 | 60
我想将它们合并或加入到一个新的数据框中,该数据框将列添加到df1,df2的价格为BB - 关于ID匹配的条件 ,但要把一切都留在原地。
期望的结果:
name | id | price | BBprice
---------------------------------
AG | 102984 | 40 | 50
TY | 847574 | 90 | 60
RE | 213441 | 30 | na
我尝试了这个,但这只是为所有列创建_x和_y副本:
result=df.merge(df2,how='left',on='id')
答案 0 :(得分:2)
但这只会为所有列创建_x和_y副本。
当您尝试合并两个共有一个或多个列名的数据帧时会发生这种情况,但这些列不会用于连接条件。解决方案是删除这些列,因为它们不需要。总之,您需要
name
列放在df2
和price
中的df2
列重命名为BBprice
,因为我们不希望它与price
的{{1}}列冲突。
df1
答案 1 :(得分:1)
你可以使用set_index
并分配它,熊猫数据帧是索引敏感的,当你分配新值时,他们首先检查索引匹配
df1=df1.set_index('id')
df2=df2.set_index('id')
df1['BBPrice']=df2.price
df1
name price BBPrice
id
102984 AG 40 50.0
847574 TY 90 60.0
213441 RE 30 NaN
df1.reset_index()
Out[150]:
id name price BBPrice
0 102984 AG 40 50.0
1 847574 TY 90 60.0
2 213441 RE 30 NaN
更新了
df1.join(df2[['price']].rename(columns={'price':'BBPrice'}),how='left')
Out[163]:
name price BBPrice
id
102984 AG 40 50.0
847574 TY 90 60.0
213441 RE 30 NaN