gpt4 book ai didi

python - 确定每个组在另一列中具有相同值的大小

转载 作者:太空宇宙 更新时间:2023-11-04 04:23:42 25 4
gpt4 key购买 nike

我有这样的dataframe

ID,CLASS_ID,ACTIVE
1,123,0
2,123,0
3,456,1
4,123,0
5,456,1
11,123,1
18,123,0
7,456,0
19,123,0
8,456,1

我正在尝试获取具有相同 ACTIVE 值的 CLASS_ID 的累积计数。在上面给出的数据帧的情况下,CLASS_ID 连续将 ACTIVE 作为 0,直到第 4 个记录发布,下一个值为 1。所以向上直到第 4 条记录,计数应为 3。此过程必须继续,并且每次 ACTIVE 的值更改 CLASS_ID 时都必须重置计数。预期输出如下如下..

ID,CLASS_ID,ACTIVE,ACTIVE_COUNT
1,123,0,3
2,123,0,3
3,456,1,2
4,123,0,3
5,456,1,2
11,123,1,1
18,123,0,2
7,456,0,1
19,123,0,2
8,456,1,1

我尝试使用 df.groupby(..).transform(..) 但它不适合我。有人可以帮我一下吗?

最佳答案

您可以使用 groupby 执行此操作:

ind = df.groupby('CLASS_ID').ACTIVE.apply(
lambda x: x.ne(x.shift()).cumsum()
)
df['ACTIVE_COUNT'] = df.groupby(['CLASS_ID', ind]).ACTIVE.transform('count')

df
ID CLASS_ID ACTIVE ACTIVE_COUNT
0 1 123 0 3
1 2 123 0 3
2 3 456 1 2
3 4 123 0 3
4 5 456 1 2
5 11 123 1 1
6 18 123 0 2
7 7 456 0 1
8 19 123 0 2
9 8 456 1 1

详情
首先,创建一个指示器列,标记每组具有相同值的行:

ind = df.groupby('CLASS_ID').ACTIVE.apply(
lambda x: x.ne(x.shift()).cumsum()
)
ind

0 1
1 1
2 1
3 1
4 1
5 2
6 3
7 2
8 3
9 3
Name: ACTIVE, dtype: int64

然后我们使用 ind 作为 df.groupby 的石斑鱼参数以及“CLASS_ID”,然后使用 transform 计算每个组的大小。

df.groupby(['CLASS_ID', ind]).ACTIVE.transform('count')

0 3
1 3
2 2
3 3
4 2
5 1
6 2
7 1
8 2
9 1
Name: ACTIVE, dtype: int64

关于python - 确定每个组在另一列中具有相同值的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53910963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com