You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用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

火山引擎 最新活动