根据数据帧中的条件删除组groupby

2024-10-03 15:23:33 发布

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

这是我的数据帧:

df = pd.DataFrame({'sym': list('aaaaaabb'), 'order': [0, 0, 1, 1, 0, 1, 0, 1], 'key': [2, 2, 2, 2, 3, 3, 4, 4],
                   'vol': [1000, 1000, 500, 500, 100, 100, 200, 200]})

我在其中添加了另一列:

df['vol_cumsum'] = df.groupby(['sym', 'key', 'order']).vol.cumsum()

让我们这样定义这个问题(而不是用词)。选中此项:

df.groupby(['sym', 'key', 'order']).vol_cumsum.last()

现在,根据上面的groupby,我想省略它们的vol_cumsum不匹配的组。在这种情况下,我想从我的df中省略第一个组。 我想要的df如下所示:

4    3      0   a   100         100
5    3      1   a   100         100
6    4      0   b   200         200
7    4      1   b   200         200

Tags: 数据keydataframedf定义orderlist省略
1条回答
网友
1楼 · 发布于 2024-10-03 15:23:33

使用^{}^{}表示与原始Series大小相同的DaatFrame,然后通过^{}^{}创建nw列:

df['vol_cumsum'] = df.groupby(['sym', 'key', 'order']).vol.cumsum()
s = df.groupby(['sym', 'key', 'order']).vol_cumsum.transform('last')
mask = df.assign(new=df['vol_cumsum'].eq(s)).groupby(['sym', 'key', 'order'])['new'].transform('all')

df = df[mask]
print (df)
  sym  order  key  vol  vol_cumsum
4   a      0    3  100         100
5   a      1    3  100         100
6   b      0    4  200         200
7   b      1    4  200         200

相关问题 更多 >