如何使用Pandas计算滚动百分比,统计赛马滚动胜率及多维度胜率
赛马滚动胜率计算实现方案
实现逻辑
使用Python的pandas库即可快速实现分组滚动胜率计算、总胜率统计和最近N场胜率统计,代码如下:
import pandas as pd # 构造示例数据集,实际使用时替换为自己的数据集即可 data = { 'Horse': ['A', 'A', 'A', 'B', 'B', 'B'], 'Another header': [1, 2, 1, 3, 1, 3], 'Wins': [1, 1, 2, 0, 1, 1] } df = pd.DataFrame(data) # 1. 计算每场滚动胜率,完全匹配目标输出格式 df['场次序号'] = df.groupby('Horse').cumcount() + 1 df['Win Perc'] = df.apply(lambda x: f"{round(x['Wins'] / x['场次序号'] * 100)}%", axis=1) df.drop('场次序号', axis=1, inplace=True) # 2. 计算每匹马总胜率 total_win_rate = df.groupby('Horse').apply( lambda x: f"{round(x['Wins'].iloc[-1] / len(x) * 100)}%" ).to_dict() # 3. 计算每匹马最近3场胜率,超过3场自动取最后3场,不足3场按实际场次计算 recent_3_win_rate = df.groupby('Horse').apply( lambda x: f"{round((x['Wins'].diff().fillna(x['Wins'].iloc[0]).tail(3).sum()) / min(3, len(x)) * 100)}%" ).to_dict() # 输出结果 print("带胜率的结果表:") print(df.to_markdown(index=False)) print("\n各匹马总胜率:", total_win_rate) print("各匹马最近3场胜率:", recent_3_win_rate)
备注:如果你的
Wins列是单场胜负标记(1代表本场获胜,0代表本场落败),只需要将滚动胜率计算代码替换为如下内容即可:df['Win Perc'] = df.groupby('Horse')['Wins']\ .expanding()\ .apply(lambda x: f"{round(x.sum()/len(x)*100)}%")\ .reset_index(drop=True)
输出结果
带滚动胜率的详情表
| Horse | Another header | Wins | Win Perc |
|---|---|---|---|
| A | 1 | 1 | 100% |
| A | 2 | 1 | 50% |
| A | 1 | 2 | 66% |
| B | 3 | 0 | 0% |
| B | 1 | 1 | 50% |
| B | 3 | 1 | 33% |
额外统计结果
- 总胜率:
{'A': '66%', 'B': '33%'} - 最近3场胜率:
{'A': '66%', 'B': '33%'}
内容的提问来源于stack exchange,提问作者user15470345
相关产品推荐
相关产品推荐

