基于重复ID的Conditional mean计算:保留非重复值,求重复值均值
按ID聚合计算均值或保留原始值
问题描述
现有如下数据:
ID Value A 2.4 A 2.3 B 1.2 C 7.5 C 3.5 C 1.3 C 1.9
需求:当ID重复出现2次及以上时,计算对应Value的均值;ID未重复时,保留原始Value值。期望输出:
ID Value A 2.35 B 1.2 C 3.55
解决方案(Python pandas实现)
用pandas的分组聚合功能即可实现,步骤如下:
- 构造数据并读取为DataFrame
- 按ID分组,统计每个ID的出现次数和Value均值
- 根据出现次数判断取值逻辑:次数≥2用均值,否则保留原始值
- 整理输出结果
代码示例:
import pandas as pd # 构造原始数据 data = { 'ID': ['A', 'A', 'B', 'C', 'C', 'C', 'C'], 'Value': [2.4, 2.3, 1.2, 7.5, 3.5, 1.3, 1.9] } df = pd.DataFrame(data) # 分组计算每个ID的出现次数和Value均值 group_stats = df.groupby('ID').agg( count=('Value', 'count'), mean_val=('Value', 'mean') ).reset_index() # 合并原始数据并去重,确保每个ID仅保留一条记录 merged_df = df.merge(group_stats, on='ID').drop_duplicates('ID') # 按规则赋值 merged_df['Value'] = merged_df.apply( lambda row: row['mean_val'] if row['count'] >= 2 else row['Value'], axis=1 ) # 保留目标列并格式化输出(保留两位小数) final_result = merged_df[['ID', 'Value']].round(2) print(final_result.to_string(index=False))
运行后输出:
ID Value A 2.35 B 1.20 C 3.55
说明
- 分组时同时统计次数和均值,避免重复计算提升效率
- 合并后去重保证每个ID唯一,符合输出要求
- 用
round(2)统一小数位数,与期望输出格式匹配
内容的提问来源于stack exchange,提问作者NewUsr_stat
相关产品推荐
相关产品推荐

