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

求助:为DataFrame按Cycle分组生成归一化百分比列

按分组计算DataFrame中时间列的百分比占比

首先,咱们来分析你之前代码的问题:

  • 你在lambda函数里用了data['time_elapsed'].max(),这是整个DataFrame的全局最大值,不是当前cycle分组内的最大值,这会导致计算逻辑完全错误;
  • 另外,sub()是减法操作,而你需要的是除法来计算占比,这也是一个逻辑失误。

下面是修正后的代码,完全符合你的需求:

import pandas as pd

# 你的示例数据
data = pd.DataFrame({
    'time_elapsed': [0.00, 0.50, 1.00, 1.30, 1.50, 0.00, 0.75, 1.50, 3.00],
    'cycle': [1, 1, 1, 1, 1, 2, 2, 2, 2]
})

# 核心逻辑:按cycle分组取最大值,计算占比后转百分比
data['percentage'] = (data['time_elapsed'] / data.groupby('cycle')['time_elapsed'].transform('max')) * 100

# 可选:如果需要像示例那样取整(去掉小数)
data['percentage'] = data['percentage'].round(0).astype(int)

print(data)

代码解释:

  • data.groupby('cycle')['time_elapsed'].transform('max'):这个操作会为每一行匹配到它所属cycle分组的最大time_elapsed值,确保每个分组用自己的基准值计算占比;
  • 用当前行的time_elapsed除以分组最大值,再乘以100得到百分比;
  • 最后用round(0).astype(int)把结果转成整数,和你期望的输出格式完全一致。

运行后你会得到正确结果:

time_elapsed  cycle  percentage
0          0.00      1           0
1          0.50      1          33
2          1.00      1          67  # 注:你示例里写的75是笔误,1.00/1.50*100≈67
3          1.30      1          87
4          1.50      1         100
5          0.00      2           0
6          0.75      2          25
7          1.50      2          50
8          3.00      2         100

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:00:11