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

如何用Pandas统计pox与sex列的四种组合数量?代码报错求解

统计水痘与性别分组的四类计数

错误原因分析

你最初的代码报错是因为逻辑与运算符&的优先级高于等于运算符==,导致条件被错误解析,必须给每个布尔判断单独加括号。后续的分组写法逻辑错误,groupby(['SEX']==1)是将布尔序列作为分组键,完全不符合统计需求。

解决方法

方法一:修正索引筛选写法

直接修正条件的括号问题,即可得到正确的整数结果:

male_pos = len(df_pox.loc[(df_pox['pox'] == 1) & (df_pox['SEX'] == 1)])
male_neg = len(df_pox.loc[(df_pox['pox'] == 2) & (df_pox['SEX'] == 1)])
female_pos = len(df_pox.loc[(df_pox['pox'] == 1) & (df_pox['SEX'] == 2)])
female_neg = len(df_pox.loc[(df_pox['pox'] == 2) & (df_pox['SEX'] == 2)])

方法二:用交叉表高效生成统计结果

使用pd.crosstab可以一步生成两列的交叉统计表,再提取对应值,代码更简洁:

import pandas as pd

# 生成sex为行、pox为列的交叉统计表
cross_tab = pd.crosstab(df_pox['SEX'], df_pox['pox'])

# 提取四个整数结果
male_pos = cross_tab.loc[1, 1]
male_neg = cross_tab.loc[1, 2]
female_pos = cross_tab.loc[2, 1]
female_neg = cross_tab.loc[2, 2]

方法三:分组统计

通过groupby同时按SEX和pox分组,统计每组的数量后提取对应值:

# 按性别和水痘情况分组,统计每组的样本数
grouped_counts = df_pox.groupby(['SEX', 'pox']).size()

# 提取对应分组的计数
male_pos = grouped_counts.loc[(1, 1)]
male_neg = grouped_counts.loc[(1, 2)]
female_pos = grouped_counts.loc[(2, 1)]
female_neg = grouped_counts.loc[(2, 2)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 03:42:13