计算熊猫DataFrame行中的买入和卖出数量差异

时间:2018-09-13 11:52:00

标签: python pandas group-by

以下我的数据需要在购买和出售上有逐项明智的区别

我当前的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 

注意:对于某些项目,上面的行可能只有BuySell中的一个,在这种情况下,它是针对Item4的

此外,输出不必包含相等的Items(在这种情况下,示例为newitem)

我已经尝试了使用DF groupby等方法实现此目的的各种方法。但是我无法获得上述输出。

2 个答案:

答案 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