基于行数与外部逻辑计算分组得分的实现方法
解决分组计算累积平均得分的方案
嗨John,很高兴帮你搞定这个问题!你要的其实就是分组内的累积平均值——对每个分组里的每一行,计算从该行往上(包含本行)所有score1的总和除以对应行数,对吧?
我用Python的Pandas库来给你演示具体实现,这是处理这类数据集最常用的工具之一:
步骤1:准备数据
先把你的示例数据转换成可操作的DataFrame:
import pandas as pd data = { 'S.no': [1, 2, 3, 4, 5], 'Group': ['GroupA', 'GroupA', 'GroupA', 'GroupA', 'GroupA'], 'score1': [1, 0, 1, 1, 1] } df = pd.DataFrame(data)
步骤2:计算分组累积平均
用Pandas的groupby结合expanding方法就能轻松实现你的需求:
# 按Group分组,对score1计算从第一行到当前行的累积平均值 df['cumulative_avg'] = df.groupby('Group')['score1'].expanding().mean().reset_index(level=0, drop=True)
运行后你的数据集会变成这样:
| S.no | Group | score1 | cumulative_avg |
|---|---|---|---|
| 1 | GroupA | 1 | 1.0 |
| 2 | GroupA | 0 | 0.5 |
| 3 | GroupA | 1 | 0.666667 |
| 4 | GroupA | 1 | 0.75 |
| 5 | GroupA | 1 | 0.8 |
完全匹配你的要求:第5行是(1+0+1+1+1)/5=0.8,第4行是(1+0+1+1)/4=0.75,完美!
补充说明
- 如果你的数据集有多个分组(比如GroupB、GroupC),这个代码会自动对每个分组单独计算,不用额外修改
expanding().mean()的作用就是从第一行开始,逐步计算到当前行的平均值,刚好贴合你的业务逻辑
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

