以下我的数据需要在买卖方面进行明智的区分
我当前的DF看起来像这样:
Items Type Qty
0 myitem1 BUY 1546
1 myitem1 SELL 1340
2 myitem2 BUY 149
3 myitem2 SELL 130
4 myitem4 SELL 100
5 newitem BUY 1000
6 newitem SELL 1000
我希望期望的输出是“买入,卖出”的差额。即
Items Type Qty
myitem1 BUY 206
myitem2 BUY 19
myitem4 SELL 100
注意:对于某些项目,上面的行可能只有
Buy
或Sell
之一,在这种情况下,它是针对Item4的此外,输出不必包含相等的Items(在这种情况下,newitem是示例)
我尝试了使用DF groupby等多种方法来实现此目的,但是我无法获得上述输出。
最佳答案
请尝试以下操作:
import numpy as np
df.groupby(['Items']).apply(lambda x:
np.select([x['Type'] == 'SELL', x['Type'] == 'BUY'], [x['Qty']*-1, x['Qty']])
).apply(sum).rename('Qty').to_frame().assign(
Type = lambda x: np.select([x['Qty'] <0, x['Qty']>0, x['Qty']==0], ['SELL', 'BUY', None]),
Qty = lambda x: x['Qty'].abs()
).dropna()
输出:
Qty Type
Items
myitem1 206 BUY
myitem2 19 BUY
myitem4 100 SELL