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

基于重复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的分组聚合功能即可实现,步骤如下:

  1. 构造数据并读取为DataFrame
  2. 按ID分组,统计每个ID的出现次数和Value均值
  3. 根据出现次数判断取值逻辑:次数≥2用均值,否则保留原始值
  4. 整理输出结果

代码示例:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:36:01