如何为二进制变量列生成累积均值并构建新DataFrame
计算Win列的累积胜率均值
需求说明
现有一个包含二进制Win列的DataFrame(约500条数据),需要新增Average列,每行值为Win列从第1行到当前行的累积胜率均值,示例如下:
| Win | Average |
|---|---|
| 1 | 1 |
| 1 | 1 |
| 0 | 0.66 |
| 0 | 0.5 |
| 0 | 0.4 |
| 1 | 0.5 |
| 0 | 0.42 |
实现方法(Pandas)
可以用两种简洁的方式实现:
方法1:累积求和除以行号
利用cumsum()计算到当前行的Win总和,再除以当前行的序号(从1开始)得到累积均值:
import pandas as pd # 替换为你的实际DataFrame df = pd.DataFrame({'Win': [1,1,0,0,0,1,0]}) # 计算累积均值并保留两位小数 df['Average'] = df['Win'].cumsum() / (df.index + 1) df['Average'] = df['Average'].round(2)
方法2:使用expanding窗口均值
Pandas的expanding().mean()可以直接计算从第一行到当前行的滚动均值,代码更简洁:
df['Average'] = df['Win'].expanding().mean().round(2)
两种方法都能得到与示例一致的结果,处理500条数据的效率都很高。
内容的提问来源于stack exchange,提问作者Buckethead
相关产品推荐
相关产品推荐

