计算pandas数据帧行中买卖数量的差异

2024-09-29 22:36:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我下面的数据需要在买入和卖出上有一个项目差异

我当前的数据框如下所示:

    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 

我希望期望的产出是买卖差额。i、 e.

^{pr2}$

注意:对于某些项目,上面的行可能只有Buy或{}中的一个,在本例中,它是针对Item4的

此外,输出不必包含相等的项(在本例中,newitem是示例)

我已经尝试了各种方法来实现这一点使用DF groupby等,但我无法得到上述输出。在


Tags: 数据项目typeitemsbuy差异qty本例
3条回答

让我们试试:

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')

输出:

^{pr2}$

你可以试着按项目分组并得到绝对差值

 df.set_index(['Items']).groupby(df.set_index(['Items']).index)['Qty'].diff().abs().dropna()

输出:

^{pr2}$

尝试以下操作:

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()

输出:

^{pr2}$

相关问题 更多 >

    热门问题