在R语言中为DataFrame新增计数列:随amount递增、随subject重置
多分组下的连续值计数实现
需求说明
现有如下结构的Pandas DataFrame:
subject amount 1 12 1 12 1 24 2 10 2 10 3 8 3 8 3 9 3 10 4 16 5 13 5 13 5 13 5 27 5 29 6 23 6 23
需要新增一列Count,规则为:
- 当
subject变更时,计数重置为1 - 同一
subject下,每当amount发生变化时,计数递增1
最终期望得到的结果如下:
subject amount Count 1 12 1 1 12 1 1 24 2 2 10 1 2 10 1 3 8 1 3 8 1 3 9 2 3 10 3 4 16 1 5 13 1 5 15 2 5 15 2 5 27 3 5 29 4 6 23 1 6 23 1
解决方案
通过Pandas的分组+连续值标记组合操作即可实现,具体代码如下:
import pandas as pd # 构造原始数据 data = { 'subject': [1,1,1,2,2,3,3,3,3,4,5,5,5,5,5,6,6], 'amount': [12,12,24,10,10,8,8,9,10,16,13,13,13,27,29,23,23] } df = pd.DataFrame(data) # 生成Count列 df['Count'] = df.groupby('subject')['amount'].apply( lambda x: (x.diff() != 0).cumsum() + 1 ) print(df)
代码逻辑说明
groupby('subject'):按subject分组,保证每个分组内的计数独立重置x.diff() != 0:判断当前行与前一行的amount是否不同,返回布尔值序列(变化为True,不变为False).cumsum():对布尔值序列累加(True视为1,False视为0),得到累计变化次数+1:将累计值偏移1,让初始计数从1开始
运行代码后即可得到符合要求的结果。
内容的提问来源于stack exchange,提问作者Dylan T
相关产品推荐
相关产品推荐

