You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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中至少出现过一次重复的数量,生成宽表格式的统计结果。

解决方案

步骤说明

  1. 识别全局重复的Code:计算每个Code在全量数据中的出现次数,筛选出出现次数≥2的Code。
  2. 标记目标行:给原数据添加标记列,标识该行的Code是否属于全局重复的。
  3. 分组统计并转宽表:对标记为重复的行按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))

输出结果

Id201620172018
1201
2100
3200
4001

内容的提问来源于stack exchange,提问作者Giuseppe Caputo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 19:21:34