如何用Pandas对CSV数据按年龄分组计算Days列平均值?
最佳Pandas实现分组计算Days平均值的方法
这是一个很常见的分组统计需求,用Pandas的分组工具就能优雅解决,下面是两种高效的实现方式,以及对你原有思路的修正说明:
方法一:使用pd.cut(推荐用于多区间分组场景)
首先我们先还原你的原始数据:
import pandas as pd data = { 'Days': [5, 4, 4, 5, 4], 'Age': [39, 54, 26, 42, 29], 'Sex': ['F', 'M', 'M', 'M', 'M'] } df = pd.DataFrame(data)
接下来用pd.cut将年龄划分为你需要的两个区间,再分组计算均值:
# 划分年龄分组:<=35 和 >=36 age_bins = pd.cut( df['Age'], bins=[-float('inf'), 35, float('inf')], # 定义区间边界 labels=['<=35', '>=36'] # 给每个区间设置可读性标签 ) # 按分组计算Days列的平均值 result = df.groupby(age_bins)['Days'].mean()
执行后得到的结果完全符合你的预期:
<=35 4.0000 >=36 4.6667 Name: Days, dtype: float64
方法二:使用np.where(适合简单二分分组)
如果只是单纯的二分分组,用np.where创建分组列会更简洁:
import numpy as np # 直接生成分组标签 df['Age_Group'] = np.where(df['Age'] <= 35, '<=35', '>=36') # 分组求均值 result = df.groupby('Age_Group')['Days'].mean()
这个方法也能得到和上面完全一致的结果。
对你原有思路的说明
你之前尝试的df["Days"].mean().where(df["Age"]>35)逻辑是错误的:df["Days"].mean()会先计算整个Days列的平均值(结果是4.4),再用where对这个单一数值做条件筛选,根本无法实现分组统计的效果。正确的逻辑应该是先分组,再对每个分组计算均值,这也是上面两种方法的核心思路。
内容的提问来源于stack exchange,提问作者Jerry




