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

基于分组列统计指定列中大于0值的行数问题求助

分组统计指定列中满足条件的行数解决方案

示例数据集

Col1    Col2    Col3
A        100     100
A         0       0
A         0      100
B        100      0
C        100     100
C        100     100

需求

按Col1的A/B/C分组,统计Col2和Col3中值为100(或大于0)的行数,得到如下结果:

Col2_counts  Col3_counts
Col1                         
A              1            2
B              1            0
C              2            2

错误原因分析

你之前使用的df.groupby(['Col1', 'Col2', 'Col3']).transform('count')无法得到预期结果,问题在于:

  • 同时按三列分组,会将Col2/Col3的不同值拆分为独立子组,无法实现按Col1统一聚合的目标
  • transform('count')返回与原数据集行数一致的结果,而非每个Col1分组的汇总统计值

正确实现代码

1. 构造示例DataFrame

import pandas as pd

data = {
    'Col1': ['A', 'A', 'A', 'B', 'C', 'C'],
    'Col2': [100, 0, 0, 100, 100, 100],
    'Col3': [100, 0, 100, 0, 100, 100]
}
df = pd.DataFrame(data)

2. 统计值为100的行数

利用布尔值求和(True对应1,False对应0)的特性,直接统计分组内满足条件的行数:

# 按Col1分组,聚合统计指定列的符合条件行数
result = df.groupby('Col1').agg(
    Col2_counts=('Col2', lambda x: (x == 100).sum()),
    Col3_counts=('Col3', lambda x: (x == 100).sum())
).set_index('Col1')

print(result)

3. 扩展:统计大于0的行数

只需修改lambda中的条件即可:

result_gt0 = df.groupby('Col1').agg(
    Col2_counts=('Col2', lambda x: (x > 0).sum()),
    Col3_counts=('Col3', lambda x: (x > 0).sum())
).set_index('Col1')

后续扩展(可选)

如果需要计算占比,比如Col2的满足条件行数占该分组总行数的比例,可以在聚合时同时统计总行数:

ratio_result = df.groupby('Col1').agg(
    Col2_counts=('Col2', lambda x: (x == 100).sum()),
    Col2_total=('Col2', 'count'),
    Col3_counts=('Col3', lambda x: (x == 100).sum()),
    Col3_total=('Col3', 'count')
).assign(
    Col2_ratio=lambda x: x['Col2_counts'] / x['Col2_total'],
    Col3_ratio=lambda x: x['Col3_counts'] / x['Col3_total']
).set_index('Col1')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 18:57:32