以下我的数据需要在购买和出售上有逐项明智的区别
我当前的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
我希望期望的输出是Buy,Sell的差额。即
Items Type Qty
myitem1 BUY 206
myitem2 BUY 19
myitem4 SELL 100
注意:对于某些项目,上面的行可能只有Buy
或Sell
中的一个,在这种情况下,它是针对Item4的
此外,输出不必包含相等的Items(在这种情况下,示例为newitem)
我已经尝试了使用DF groupby等方法实现此目的的各种方法。但是我无法获得上述输出。
答案 0 :(得分:2)
让我们尝试一下:
df_out = (df.assign(Qty = np.where(df.Type == 'SELL', -df.Qty, df.Qty))
.groupby('Items')['Qty'].sum().reset_index())
df_out['TYPE'] = np.where(np.sign(df_out.Qty)==1,'BUY','SELL')
df_out.assign(Qty=df_out.Qty.abs()).query('Qty > 0')
输出:
Items Qty TYPE
0 myitem1 206 BUY
1 myitem2 19 BUY
2 myitem4 100 SELL
答案 1 :(得分:1)
您可以尝试按项目分组并获得差异的绝对值
df.set_index(['Items']).groupby(df.set_index(['Items']).index)['Qty'].diff().abs().dropna()
出局:
Items
myitem1 206.0
myitem2 19.0
newitem 0.0