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

Pandas保留所有行前提下按条件计算分组占比的实现问题

解决方法

你原来的代码存在三个核心问题:

  • 语法错误:groupby(['index', 'Col1']后缺少闭合的方括号,运行会直接报错
  • 分组键设置错误:需求是仅按Col1分组计算占比,你额外加了index作为分组键,会导致每个分组仅包含1行数据,计算结果不符合预期
  • 方法选择错误:apply会对每个分组返回聚合后的单行结果,直接赋值会覆盖原有DataFrame的结构,导致丢失列和行;应该使用transform方法,它会把分组计算结果广播到分组内的所有行,完全保留原有行数和列。

正确实现代码

import pandas as pd

# 业务需要的排序逻辑可保留
df = df.sort_values(['index', 'Col1'], ascending=(True, True))

# 核心计算逻辑:按Col1分组,计算Col9>50的行占比,广播到同组所有行
# 布尔值True等价于1、False等价于0,均值就是符合条件的占比,乘以100转为百分比
df['Percentual'] = df.groupby('Col1')['Col9'].transform(lambda x: (x > 50).mean() * 100)

# 如果需要带%符号的字符串格式,可新增以下代码
# df['Percentual'] = df['Percentual'].apply(lambda x: f"{x:.0f}%")

效果验证

用你给出的示例场景测试,输出结果如下:

indexCol1Col9Percentual
1a6050.0
2a4050.0
3b300.0
4b200.0
5c7025.0
6c4025.0
7c3025.0
8c1025.0

完全符合需求:原有所有行和列都保留,同组Percentual值一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:45:03