我有一个名为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.concat
和pandas.merge
找到表达方式,但我无法解决我加入的关键问题on(order_number)在orders
数据框中是唯一的,但在products
数据框中不是。
如何在熊猫中进行这样的多对一连接?
答案 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'))