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

Pandas SeriesGroupBy无tolist属性报错 分组统计stroke列计数问题

问题原因说明

你的原有代码写法是错误的,报错触发原因如下:

  • 分组逻辑完全颠倒:需求是按Residence_type列的不同值分组统计stroke=1的数量,原代码错误使用stroke字段作为groupby的分组键,和需求逻辑不符
  • 方法调用对象错误:tolist()是普通Pandas Series的方法,data.groupby('stroke')['Residence_type']返回的是SeriesGroupBy分组对象,该对象没有tolist()属性,直接调用就会抛出你遇到的AttributeError
  • 统计逻辑冗余:就算绕过前面的报错,把分组对象转成普通对象再调tolist().count(1)的思路也完全不符合Pandas的常规用法,效率低且容易出其他错误。
正确实现代码

你的需求可以直接通过Pandas内置的分组聚合实现,不需要转列表操作:

注意:示例数据中stroke列实际列名为首字母大写的Stroke,代码中请和你自身数据的实际列名保持一致

# 方法1:利用0/1列求和直接得到每组中stroke=1的总数(最简洁高效)
group_stroke_cnt = data.groupby('Residence_type')['stroke'].sum()
# 计算两个分组的数量差值,需要绝对值可以套abs()
count_diff = group_stroke_cnt['Urban'] - group_stroke_cnt['Rural']

# 方法2:先筛选stroke=1的记录再分组计数,逻辑更直观
group_stroke_cnt = data[data['stroke'] == 1].groupby('Residence_type')['stroke'].count()
count_diff = group_stroke_cnt['Urban'] - group_stroke_cnt['Rural']

对照你给出的示例数据计算:

  • Rural分组下stroke=1的记录共3条
  • Urban分组下stroke=1的记录共2条
  • 最终差值为2-3 = -1,如果取绝对值则为1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:51:32