You need to enable JavaScript to run this app. 如何使用pandas动态生成绘图所需的年龄与分性别计数嵌套列表
优惠活动
大模型
产品
解决方案
定价
更多

如何使用pandas动态生成绘图所需的年龄与分性别计数嵌套列表

实现方案

你原有代码存在两处可优化点:

  • 过滤条件中将变量cat写死为字符串'cat',无法匹配到真实的性别值
  • 未提前定义列表容器存储统计结果,生成的计数无法汇总成你需要的嵌套结构

方法1:基于你的原有逻辑修改

import pandas as pd

# 示例数据集
data = {'age':[21, 21, 21, 20, 20, 20, 21, 20, 20, 21, 19, 20, 19, 21, 20, 19, 19, 20, 21, 21],
        'sex':['F', 'M', 'M', 'M', 'M', 'F', 'M', 'F', 'M', 'F', 'F', 'F', 'M', 'M', 'F', 'M', 'M', 'M', 'F', 'M']}
user_data = pd.DataFrame(data, columns=['age','sex'])

# 获取x轴:排序后的年龄列表
x = sorted(user_data['age'].unique().tolist())

# 获取性别分类,固定顺序为女性在前、男性在后,和你示例结构对应
sex_categories = ['F', 'M']
# 初始化y的嵌套列表,每个性别对应一个空列表
y = [[] for _ in sex_categories]

# 遍历每个年龄,统计对应性别的计数
for age in x:
    for idx, sex in enumerate(sex_categories):
        count = user_data[(user_data['age'] == age) & (user_data['sex'] == sex)].shape[0]
        y[idx].append(count)

执行后输出的结构和你要求完全一致:

  • x = [19, 20, 21]
  • y = [[1, 4, 3], [3, 4, 5]] (依次对应女性各年龄计数、男性各年龄计数)

方法2:使用pandas内置函数更高效实现

不需要自己写循环,直接用交叉表统计,性能更高,代码更简洁:

# 统计每个年龄下的分性别计数
count_df = pd.crosstab(user_data['age'], user_data['sex'])
# 按要求提取x和y
x = count_df.index.tolist()
y = [count_df['F'].tolist(), count_df['M'].tolist()]

得到的结果和方法1完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 12:15:00