我有两个数据框;订单和退货。
订单:
Index | OrderID |TransactionID | ProductID | BuyerID | Date | TotalOrder | ProductPrice
-----------------------------------------------------------------------------------------------
0 | A | A-1 | 05 | 1 | dd-mm-yyy | 140 | 50
1 | A | A-2 | 45 | 1 | dd-mm-yyy | 140 | 90
2 | B | B-1 | 33 | 1 | dd-mm-yyy | 15 | 10
3 | B | B-2 | 01 | 1 | dd-mm-yyy | 15 | 5
4 | C | C-1 | 45 | 1 | dd-mm-yyy | 90 | 90
5 | D | D-1 | 45 | 1 | dd-mm-yyy | 90 | 90
6 | E | E-1 | 45 | 1 | dd-mm-yyy | 90 | 90
7 | F | F-1 | 45 | 2 | dd-mm-yyy | 90 | 90
返回值:
ProductID | BuyerID | ProductPrice | Amount
------------------------------------------------------------------------------------------------
33 | 1 | 10 | 1
45 | 1 | 90 | 2
01 | 1 | 5 | 1
对于退货中的每一行,订单中具有匹配的ProductID,BuyerID和ProductPrice的行应删除n(= returns['Amount']
)次。因此,我将仅获得索引为0、7以及1、4、5或6中的两个的行。
Index | OrderID |TransactionID | ProductID | BuyerID | Date | TotalOrder | ProductPrice
------------------------------------------------------------------------------------------------
0 | A | A-1 | 05 | 1 | dd-mm-yyy | 140 | 50
7 | F | F-1 | 45 | 2 | dd-mm-yyy | 90 | 90
-----------------------------------------------------------------------------------------
| 1 | A | A-2 | 45 | 1 | dd-mm-yyy | 140 | 90 |
| 4 | C | C-1 | 45 | 1 | dd-mm-yyy | 90 | 90 |+ 2 out
| 5 | D | D-1 | 45 | 1 | dd-mm-yyy | 90 | 90 |of these
| 6 | E | E-1 | 45 | 1 | dd-mm-yyy | 90 | 90 |
-----------------------------------------------------------------------------------------
有什么办法可以做到吗?
这应该工作:
import pandas as pd
orders = pd.DataFrame(
{
'orderId': ['a', 'a', 'b', 'b', 'c', 'd', 'e', 'f'],
'pid': [5, 45, 33, 1, 45, 45, 45, 45],
'bid': [1, 1, 1, 1, 1, 1, 1, 2],
'torder': [140, 140, 15, 15, 90, 90, 90, 90],
'px': [50, 90, 10, 5, 90, 90, 90, 90]
}
)
returns = pd.DataFrame(
{
'pid': [33, 45, 1],
'bid': [1, 1, 1],
'px': [10, 90, 5],
'amount': [1, 2, 1]
}
)
orders['temp'] = 1
orders['rid'] = orders.groupby(['pid', 'bid', 'px'])['temp'].transform(pd.Series.cumsum)
orders = orders.merge(returns, on=['pid', 'bid', 'px'], how='outer').fillna(0)
left_orders = orders[orders.rid > orders.amount].drop(columns=['temp', 'rid', 'amount'])
print(left_orders)
输出:
orderId pid bid torder px
0 a 5 1 140 50
3 d 45 1 90 90
4 e 45 1 90 90
7 f 45 2 90 90
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句