如何在R中按联赛分组计算球队评分与组内最高分差值并新增列
按联赛分组计算球队评分与联赛最高分的差值
核心思路
用groupby结合transform方法,将每个联赛的最高分广播到该联赛的所有球队行,再直接计算与当前球队评分的差值,避免分组后合并的繁琐操作。
示例代码
- 先构造示例DataFrame(可替换为你的实际数据):
import pandas as pd data = { '球队': ['凯尔特人', '猛龙', '湖人', '马刺', '巴萨', '皇马'], '联赛': ['NBA', 'NBA', 'NBA', 'NBA', '西甲篮球', '西甲篮球'], '评分': [100, 85, 92, 88, 95, 90] } df = pd.DataFrame(data)
- 一步计算并添加差值列:
# 计算每个联赛的最高分,广播到对应行后减去当前评分,生成新列 df['与最高分差值'] = df.groupby('联赛')['评分'].transform('max') - df['评分']
结果展示
运行后DataFrame会新增与最高分差值列,效果如下:
| 球队 | 联赛 | 评分 | 与最高分差值 |
|---|---|---|---|
| 凯尔特人 | NBA | 100 | 0 |
| 猛龙 | NBA | 85 | 15 |
| 湖人 | NBA | 92 | 8 |
| 马刺 | NBA | 88 | 12 |
| 巴萨 | 西甲篮球 | 95 | 0 |
| 皇马 | 西甲篮球 | 90 | 5 |
关键说明
groupby('联赛')['评分'].transform('max'):会为每个联赛的所有行返回该联赛的最高分,生成与原DataFrame长度一致的序列,解决了直接用max()得到分组汇总值无法对应原行的问题。- 如果需要保留联赛最高分的中间列,可以拆分两步:
df['联赛最高分'] = df.groupby('联赛')['评分'].transform('max') df['与最高分差值'] = df['联赛最高分'] - df['评分']
内容的提问来源于stack exchange,提问作者Saba Al shawa
相关产品推荐
相关产品推荐

