在Julia中如何基于Gender列值筛选对应Age子集并统计数量
错误原因说明
df.Age, Gender触发未定义错误的原因:该写法会被Julia解析为返回两个独立对象df.Age和全局变量Gender,你没有单独定义过Gender变量,自然报错。要取DataFrame的多列需要写成df[:, [:Age, :Gender]]的格式。- 之前
combine(groupby(df, :Age), :Gender=>"Male")返回结果不符合预期,是因为分组逻辑完全错误:你需要按Gender(性别)分组,而非按Age(年龄)分组,才能聚合得到不同性别对应的年龄数据和统计值。
正确实现方法
1. 单独筛选不同性别的年龄列表
提取所有男性的年龄:
# 注意==前的点是广播操作符,必须加上才能对整列逐行判断 male_ages = df[df.Gender .== "Male", :Age]
提取所有女性的年龄:
female_ages = df[df.Gender .== "Female", :Age]
执行后male_ages、female_ages就是对应性别的年龄数组,直接调用length(male_ages)就能得到对应性别的人数。
2. 一次性统计所有性别的年龄列表和对应人数
如果你希望用一行代码直接得到聚合结果,可以用分组聚合写法:
result = combine( groupby(df, :Gender), :Age => (x -> [collect(x)]) => :年龄列表, nrow => :总人数 )
用你给出的示例数据执行后,返回的result结构如下:
| Gender | 年龄列表 | 总人数 |
|---|---|---|
| Male | [30, 55, 61, 70] | 4 |
| Female | [24, 21] | 2 |
如果只需要统计人数不需要导出年龄列表,可以简化写法:
gender_count = combine(groupby(df, :Gender), nrow => :总人数)
内容的提问来源于stack exchange,提问作者Jeremy S
相关产品推荐
相关产品推荐

