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

标签 python pandas dataframe group-by pandas-groupby

我有这样的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/

相关文章:

r - 根据另一个数据框中的日期范围划分数据框中的值

python - 通过用户名邀请用户到 Telegram channel

python - 从 header 中删除索引并重新索引数据以从 0 开始

python - 带分隔符的 Pandas Dataframe 到 String

python - 尝试使用经度和纬度获取距离,但一直运行到错误 : 'Series' object has no attribute 'radians'

Python pandas - 平均 10 分钟测量到 15 分钟平均值和 60 分钟平均值,具体取决于数据差距的长度

r - 数据框中跨列的最大组合总和

python - 从 python 将多个字符串写入 csv

python 列表控制增量

python - 循环嵌套字典值