为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

潇湘沐 2021-09-25 13:26:26
我有dataframe这样的,ID,CLASS_ID,ACTIVE1,123,02,123,03,456,14,123,05,456,111,123,118,123,07,456,019,123,08,456,1我正在尝试获取CLASS_ID具有相同值的ACTIVE. 在上面给出的数据帧的情况下,CLASS_ID连续有ACTIVEas 0,直到下一个值为 1 的第 4 条记录。所以直到第 4 条记录,计数应该是 3。这个过程必须继续,并且每次都必须重置计数预期输出的ACTIVE更改值CLASS_ID如下..ID,CLASS_ID,ACTIVE,ACTIVE_COUNT1,123,0,32,123,0,33,456,1,24,123,0,35,456,1,211,123,1,118,123,0,27,456,0,119,123,0,28,456,1,1我尝试使用df.groupby(..).transform(..)但它不适合我。有人可以帮我一下吗?
查看完整描述

1 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

你可以这样做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

然后我们将与“CLASS_ID”一起用作 grouperind参数,然后使用df.groupby计算每个组的大小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


查看完整回答
反对 回复 2021-09-25
  • 1 回答
  • 0 关注
  • 170 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号