pandas 子集将 Dataframe 传送到第一次满足条件时

plicqrtu  于 2022-12-16  发布在  其他
关注(0)|答案(1)|浏览(114)

我还没有任何运气完成一个任务,我想子集化Pandas Dataframe 到一个值,并按他们的id分组。在实际的数据集中,我有几列在'id'和'status'之间
例如:

d = {'id': [1,1,1,1,1,1,1,2,2,2,2,2,2,2], 'status': [0,0,0,0,1,1,1,0,0,0,0,1,0,1]}
df = pd.DataFrame(data=d)

    id  status
0    1       0
1    1       0
2    1       0
3    1       0
4    1       1
5    1       1
6    1       1
7    2       0
8    2       0
9    2       0
10   2       0
11   2       1
12   2       0
13   2       1

所需子集为:

id  status
0    1       0
1    1       0
2    1       0
3    1       0
4    1       1
5    2       0
6    2       0
7    2       0
8    2       0
9    2       1

u1ehiz5o

u1ehiz5o1#

让我们试试groupby + cumsum

df = df.groupby('id', group_keys=False)\
       .apply(lambda x: x[x.status.cumsum().cumsum().le(1)])\
       .reset_index(drop=1)
df

   id  status
0   1       0
1   1       0
2   1       0
3   1       0
4   1       1
5   2       0
6   2       0
7   2       0
8   2       0
9   2       1

下面是执行groupby以创建用作索引器的掩码的替代方法:

df = df[df.status.eq(1).groupby(df.id)\
          .apply(lambda x: x.cumsum().cumsum().le(1))]\
          .reset_index(drop=1)
df

   id  status
0   1       0
1   1       0
2   1       0
3   1       0
4   1       1
5   2       0
6   2       0
7   2       0
8   2       0
9   2       1

相关问题