加入两个不同大小的数据框,但只想添加一个新列

时间:2018-01-06 17:57:44

标签: python pandas dataframe merge

如果我有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')

2 个答案:

答案 0 :(得分:2)

  

但这只会为所有列创建_x和_y副本。

当您尝试合并两个共有一个或多个列名的数据帧时会发生这种情况,但这些列不会用于连接条件。解决方案是删除这些列,因为它们不需要。总之,您需要

  1. name列放在df2
  2. price中的df2列重命名为BBprice,因为我们不希望它与price的{​​{1}}列冲突。
  3. 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