如何使用Pandas的apply()方法按字典权重缩放足球统计数据列
使用Pandas的apply()实现足球数据列加权
首先要注意:你的权重字典里的键和DataFrame列名存在不匹配——字典里的Ass对应DataFrame的Ast,Fld对应Fls,得先修正权重字典的键名,否则无法正确匹配列:
# 修正后的权重字典 weights = { 'Gls':8, 'Ast':5, 'SoT':1.5, 'Sha':1.3, 'Crs':1.2, 'Fls':1.2 }
接下来用apply()方法实现加权,推荐按列处理(效率更高),代码如下:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'team': ['Arg'], 'match': [987.], 'Gls': [0.11], 'Ast': [0.04], 'SoT': [0.8], 'Sha': [0.5], 'Crs': [0.2], 'Fls': [0.65] }) # 使用apply按列加权,非权重列保持原值(乘1) weighted_df = df.apply(lambda col: col * weights.get(col.name, 1), axis=0) print(weighted_df)
代码说明:
axis=0表示按列处理,每一列作为参数传入lambda函数col.name获取当前处理的列名,weights.get(col.name, 1)用于匹配对应权重,若列名不在权重字典中(比如team、match)则返回1,保持原列值不变- 最终得到的
weighted_df就是各统计列按权重缩放后的结果
如果一定要按行处理(效率略低,适合小数据集),可以这样写:
weighted_df = df.apply(lambda row: pd.Series({ col: row[col] * weights.get(col, 1) for col in row.index }), axis=1)
内容的提问来源于stack exchange,提问作者8-Bit Borges
相关产品推荐
相关产品推荐

