猿问

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

我有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

我正在尝试获取CLASS_ID具有相同值的ACTIVE. 在上面给出的数据帧的情况下,CLASS_ID连续有ACTIVEas 0,直到下一个值为 1 的第 4 条记录。所以直到第 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(..)但它不适合我。有人可以帮我一下吗?


潇湘沐
浏览 171回答 1
1回答

Smart猫小萌

你可以这样做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_COUNT0   1       123       0             31   2       123       0             32   3       456       1             23   4       123       0             34   5       456       1             25  11       123       1             16  18       123       0             27   7       456       0             18  19       123       0             29   8       456       1             1详细信息首先,创建一个指标列,标记每组具有相同值的行:ind = df.groupby('CLASS_ID').ACTIVE.apply(    lambda x: x.ne(x.shift()).cumsum())ind0    11    12    13    14    15    26    37    28    39    3Name: ACTIVE, dtype: int64然后我们将与“CLASS_ID”一起用作 grouperind参数,然后使用df.groupby计算每个组的大小transform。df.groupby(['CLASS_ID', ind]).ACTIVE.transform('count')0    31    32    23    34    25    16    27    18    29    1Name: ACTIVE, dtype: int64
随时随地看视频慕课网APP

相关分类

Python
我要回答