如何在具有不同索引和非唯一键的两个pandas数据帧中连接列

时间:2016-05-24 12:47:56

标签: python pandas dataframe merge

我有一个名为products的数据框,如下所示:

   order_number  sku  units revenue
1  5000          754  1     20.0
2  5000          900  4     30.0
3  5001          754  2     40.0
4  5002          754  10    200.0
.  ...           ...  ..    ...

和另一个看起来像这样的orders

   date    order_number  units revenue  country new_customer ...
1  1-jan   5000          5     50.0     russia  yes          
2  1-jan   5001          2     40.0     china   yes          
3  2-jan   5002          10    200.0    france  no
4  2-jan   5003          1     70.0     brazil  yes
.  ....    ...           ..    ...      ...

我想创建一个数据框,其中包含products数据框中的行,但还有orders数据框中的列,其中orders中的订单编号与products中的订单号。

我试图通过pandas.concatpandas.merge找到表达方式,但我无法解决我加入的关键问题on(order_number)在orders数据框中是唯一的,但在products数据框中不是。

如何在熊猫中进行这样的多对一连接?

1 个答案:

答案 0 :(得分:3)

我认为您正在寻找join(您必须提供后缀,因为您有一个重复的列revenue):

>>> import pandas as pd
>>> products = pd.DataFrame({'order_number': [5000, 5000, 5001, 5002, 5004],
...                          'sku':          [ 754,  900,  754,  754,  900],
...                          'revenue':      [20.0, 30.0, 40.0,200.0, 90.0]})
>>> orders   = pd.DataFrame({'order_number': [5000, 5001, 5002, 5003],
...                          'units':        [   5,    2,   10,    1],
...                          'revenue':      [50.0, 40.0,200.0, 70.0]})
>>> products.join(orders.set_index('order_number'), 'order_number', rsuffix='_o')
   order_number  revenue  sku  revenue_o  units
0          5000       20  754         50      5
1          5000       30  900         50      5
2          5001       40  754         40      2
3          5002      200  754        200     10
4          5004       90  900        NaN    NaN

编辑:使用products.merge(orders, 'left', 'order_number', suffixes=('', '_o'))

可以获得相同的结果