如何使用Pandas基于地区统计数据集中吸烟为Yes的人数?
解决按地区统计吸烟人数的问题
这里有几种简单直接的方法可以实现你的需求:
方法1:先筛选吸烟人群再分组计数
先过滤出smoker为"Yes"的行,再按region分组统计数量:
# 确保列名和你的数据集一致(注意大小写) smokers_by_region = data[data['smoker'] == 'Yes'].groupby('region').size()
size()会返回每个地区的行数,也就是对应地区的吸烟人数。
方法2:分组后直接统计符合条件的数量
利用布尔值在Pandas中会被当作1和0计算的特性,分组后直接求和得到符合条件的数量:
# 简洁写法:先判断是否为"Yes",再按地区分组求和 smokers_by_region = data.groupby('region')['smoker'].eq('Yes').sum()
这种方法无需提前筛选,直接在分组内完成统计。
方法3:用交叉表查看完整分布
如果想同时看到各地区吸烟/不吸烟的人数对比,可以用交叉表:
import pandas as pd pd.crosstab(data['region'], data['smoker'])
结果里的"Yes"列就是你需要的各地区吸烟人数。
你之前代码的问题说明:
data.groupby('Region').count():这个会统计每个地区下所有列的非空值数量,不是仅统计吸烟的人数,不符合需求。data.groupby('Region').apply(lambda g: pd.Series(g['Smoker'].str.contains("y").count())):count()在这里返回的是该组的总行数(不管是否匹配"y"),要统计匹配的数量应该换成sum()。data['Smoker'].value_counts().reindex(['Region']):value_counts()是统计Smoker列的取值分布,和Region列完全无关,逻辑不成立。
内容的提问来源于stack exchange,提问作者aiellestad
相关产品推荐
相关产品推荐

