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
相关产品推荐
相关产品推荐

