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

Python中使用groupby按条件统计各年龄段女性人数问题

解决10岁区间女性人数统计问题

先说说你代码的问题:

  • 用groupby("Age")是按单个年龄分组,完全没必要,你要的是10岁区间的统计
  • lambda x: x in (i*10, i*10+9)逻辑错误,这里的x是分组后的整个DataFrame,不是单个年龄值,而且你要的是区间范围(比如0-10是0≤年龄<10?或者0-9?看你需求),不是等于两个端点
  • 没筛选女性数据,直接统计了所有人

给你两种靠谱的解决方法:

方法一:用pd.cut快速分组统计(推荐)

这是最简洁高效的方式,一步到位:

import pandas as pd

# 先筛选女性数据,列名根据你的实际情况调整(比如是"Sex"就改成对应名称)
female_data = train_data[train_data["性别"] == "女"]
# 生成区间分界点:0、10...100
age_bins = range(0, 101, 10)
# 生成区间标签:"0 - 9"到"90 - 99"
age_labels = [f"{i} - {i+9}" for i in range(0, 100, 10)]

# 给女性数据添加年龄区间列,左闭右开(比如0-10区间包含0但不包含10)
female_data["年龄区间"] = pd.cut(female_data["Age"], bins=age_bins, labels=age_labels, right=False)
# 统计每个区间的人数并按顺序输出
count_result = female_data["年龄区间"].value_counts().sort_index()

print(count_result)

如果想让区间是左开右闭(比如10-20包含10),去掉right=False参数即可。

方法二:修改你的循环逻辑(不推荐,效率较低)

如果非要用循环实现,这么改:

for i in range(0, 10):
    lower = i * 10
    upper = i * 10 + 9
    interval = f"{lower} - {upper}"
    # 筛选女性且年龄在[lower, upper]范围内的数据,统计行数
    count = train_data[(train_data["性别"] == "女") & (train_data["Age"].between(lower, upper))].shape[0]
    print(interval, count)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 08:58:16