以下我的数据需要在买卖方面进行明智的区分

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


注意:对于某些项目,上面的行可能只有BuySell之一,在这种情况下,它是针对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

08-16 08:15