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

Python中如何统计各年龄对应唯一ID数并绘制带性别区分的图表?

统计各年龄唯一ID数量并按性别绘图

数据集

IDAGESEX
25111
25121
18111
18122
18132
199111
409111

需求

统计每个年龄对应的唯一ID数量,并用hue参数按性别区分绘图,无需显示ID编号,仅展示各年龄对应不同ID的出现情况。

此前尝试的代码

for an_id in df.ID.unique():
    if (len(df[df['ID'] == an_id]['AGE'].unique()))==1:
        print(an_id, df[df['ID'] == an_id]['AGE'].unique()[0])
    else:
        print(an_id,df[df['ID']==an_id]['AGE'].unique())

问题在于部分ID对应多个年龄,使用unique()会得到年龄列表,无法直接用于统计绘图。

解决方案

1. 数据去重

先对ID、AGE、SEX的组合去重,确保每个ID在对应年龄和性别下仅保留一条记录,避免重复计数:

unique_df = df.drop_duplicates(subset=['ID', 'AGE', 'SEX'])

2. 分组统计唯一ID数量

按AGE和SEX分组,统计每组的唯一ID数量:

count_df = unique_df.groupby(['AGE', 'SEX'])['ID'].nunique().reset_index(name='Unique ID Count')

3. 绘图展示

使用seaborn绘制柱状图,通过hue参数按性别区分:

import seaborn as sns
import matplotlib.pyplot as plt

sns.barplot(data=count_df, x='AGE', y='Unique ID Count', hue='SEX')
plt.title('Unique ID Count by Age and Sex')
plt.xlabel('Age')
plt.ylabel('Number of Unique IDs')
plt.show()

效果说明

  • 去重步骤解决了同一ID对应多年龄/性别的重复计数问题
  • 分组统计后得到的count_df直接满足绘图所需的结构
  • 绘图时hue=SEX自动将不同性别的数据用不同颜色区分,清晰展示各年龄下不同性别对应的唯一ID数量分布

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 23:15:34