如何按col1分组统计col3≥95时col2中1和0的数量?
解决方法
先筛选出col3 ≥ 95的数据集,再按col1分组统计col2中1和0的数量,以下是两种简洁的实现方式:
方法一:groupby + value_counts
# 过滤出col3≥95的数据 filtered_df = df[df['col3'] >= 95] # 按col1分组,统计每组col2的取值数量,空值用0填充 result = filtered_df.groupby('col1')['col2'].value_counts().unstack(fill_value=0)
运行后会生成一个结构化表格:行对应col1的各个取值(NAME、CITY、STATE),列对应0和1,单元格是对应分组下的统计数量。
方法二:pd.crosstab一步生成结果
import pandas as pd # 直接用交叉表完成过滤+分组统计 result = pd.crosstab( index=df[df['col3'] >= 95]['col1'], columns=df[df['col3'] >= 95]['col2'], dropna=False ).fillna(0)
这种方式无需分步处理,直接输出和方法一一致的统计结果。
针对你的示例数据,最终结果如下:
| col1 | 0 | 1 |
|---|---|---|
| CITY | 0 | 1 |
| NAME | 0 | 2 |
| STATE | 0 | 1 |
你之前写的过滤条件逻辑有误,应该先锁定col3≥95的行,再按col1分组统计,而不是用|(或逻辑)关联条件。
内容的提问来源于stack exchange,提问作者Cosmo Boy
相关产品推荐
相关产品推荐

