使用R统计DataFrame中各ID每年重复Code的数量
按Id和年份统计全局重复Code的数量
输入数据
Id | Code | year 1 | ZZZ | 2016 1 | KKK | 2016 1 | A23 | 2018 2 | A01 | 2018 2 | KKK | 2016 2 | ddd | 2017 3 | KKK | 2016 3 | ZZZ | 2016 4 | A23 | 2018 4 | 000 | 2018 5 | 009 | 2018
需求
按Id分组,统计每个Id在各年份下,该Code在整个DataFrame中至少出现过一次重复的数量,生成宽表格式的统计结果。
解决方案
步骤说明
- 识别全局重复的Code:计算每个Code在全量数据中的出现次数,筛选出出现次数≥2的Code。
- 标记目标行:给原数据添加标记列,标识该行的Code是否属于全局重复的。
- 分组统计并转宽表:对标记为重复的行按
Id和year分组计数,转换为宽表后填充缺失值为0。
代码实现
import pandas as pd # 构建输入DataFrame df = pd.DataFrame({ 'Id': [1,1,1,2,2,2,3,3,4,4,5], 'Code': ['ZZZ','KKK','A23','A01','KKK','ddd','KKK','ZZZ','A23','000','009'], 'year': [2016,2016,2018,2018,2016,2017,2016,2016,2018,2018,2018] }) # 1. 获取全局重复的Code列表 duplicate_codes = df['Code'].value_counts()[lambda x: x >= 2].index # 2. 标记每行Code是否为重复项 df['is_duplicate'] = df['Code'].isin(duplicate_codes) # 3. 分组统计,转宽表并填充0 result = ( df[df['is_duplicate']] .groupby(['Id', 'year']) .size() .unstack(fill_value=0) .reindex(columns=sorted(df['year'].unique()), fill_value=0) .reset_index() ) # 打印格式化结果 print(result.to_string(index=False))
输出结果
| Id | 2016 | 2017 | 2018 |
|---|---|---|---|
| 1 | 2 | 0 | 1 |
| 2 | 1 | 0 | 0 |
| 3 | 2 | 0 | 0 |
| 4 | 0 | 0 | 1 |
内容的提问来源于stack exchange,提问作者Giuseppe Caputo
相关产品推荐
相关产品推荐

