Python 确定在另一列中具有相同值的每个组内的大小
我有这样的Python 确定在另一列中具有相同值的每个组内的大小,python,pandas,dataframe,group-by,pandas-groupby,Python,Pandas,Dataframe,Group By,Pandas Groupby,我有这样的dataframe ID,CLASS\u ID,活动 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 我正在尝试获取类ID的累积计数,该类ID的值与活动的值相同。在上述数据帧的情况下,CLASS_ID连续具有ACTIVEas0,直到下一个值为1的第四个记录桩。所以直到第四个记录,计数应该是3。必须继续此过程,并且每次CLASS_ID的ACTIVE值发生变化时,必须重置
dataframe
ID,CLASS\u ID,活动
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
我正在尝试获取类ID的累积计数,该类ID的值与活动的值相同。在上述数据帧的情况下,CLASS_ID
连续具有ACTIVE
as0
,直到下一个值为1的第四个记录桩。所以直到第四个记录,计数应该是3。必须继续此过程,并且每次CLASS_ID
的ACTIVE
值发生变化时,必须重置计数。预期输出如下所示
ID,类ID,活动,活动计数
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
的grouper参数以及“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
你是说第三张而不是第四张唱片吗?还是没有真正理解你的问题。