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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:45:41