【问题标题】:how to merge two pandas dataframe correctly如何正确合并两个熊猫数据框
【发布时间】:2018-05-24 11:58:36
【问题描述】:

我有 2 个数据框

df1

Code  Sales  Store
A       10   alpha
B        5   beta
C        4   gamma
B        3   alpha

df2

Code   Unit_Price  
A          2       
B          3     
C          4
D          5
E          6

我想在这里做两件事。

首先我要检查 df1 中的所有唯一代码是否在 df2 中

其次,我想通过代码合并这2个df2

df3,应该看起来像

Code  Sales  Store   unit_price
A       10   alpha      2
B        5   beta       3
C        4   gamma      4
D        3   alpha      5

我做到了

df3 = df1.merge(df2,on='Code',how='left')

不确定我是否正确,我将感谢您在此记录中帮助我的时间和精力

【问题讨论】:

  • 请解释您的预期结果的最后一行是如何得出的。 df1 中没有代码 D。

标签: pandas dataframe merge


【解决方案1】:

需要numpy.setdiff1d 来检查列的成员唯一值:

print (np.setdiff1d(df1['Code'].unique(), df1['Code'].unique()))
[]

print (np.setdiff1d(df2['Code'].unique(), df1['Code'].unique()))
['D' 'E']

您的解决方案很好,特别是如果需要添加更多列,例如:

print (df2)
  Code  Unit_Price  col
0    A           2    7
1    B           3    2
2    C           4    1
3    D           5    0
4    E           6    3

df3 = df1.merge(df2,on='Code',how='left')
print (df3)
  Code  Sales  Store  Unit_Price  col
0    A     10  alpha           2    7
1    B      5   beta           3    2
2    C      4  gamma           4    1
3    B      3  alpha           3    2

如果需要只添加一列,可以使用map by Series 应该更快:

df1['unit_price'] = df1['Code'].map(df2.set_index('Code')['Unit_Price'])
print (df1)
  Code  Sales  Store  unit_price
0    A     10  alpha           2
1    B      5   beta           3
2    C      4  gamma           4
3    B      3  alpha           3

【讨论】:

  • Thamks jezrael,请回答我的第一个问题,如何检查 df2 是否具有 df1 中的所有唯一代码
  • 谢谢你,jezrael
猜你喜欢
  • 2017-06-11
  • 2016-01-01
  • 1970-01-01
  • 2021-07-28
  • 2019-09-27
  • 1970-01-01
  • 2017-09-02
相关资源
最近更新 更多