在数据分析中,我们常常需要按照不同字段的重要程度计算一个综合得分,并将结果作为新列写回 Pandas DataFrame。利用字典来保存列名与权重的映射关系,可以让加权求和的逻辑清晰且易于修改。

基本思路
假设 DataFrame 中有若干数值列,我们通过一个字典指定每一列在求和时的权重,然后将各列与其权重相乘再按行相加,最后用 assign 方法添加新列。
示例代码
下面演示如何根据字典权重对列做加权求和并添加新列:
import pandas as pd
# 构造示例数据
data = {
'math': [90, 80, 70],
'english': [85, 75, 95],
'science': [88, 92, 78]
}
df = pd.DataFrame(data)
# 定义权重字典,键为列名,值为权重
weights = {
'math': 0.4,
'english': 0.3,
'science': 0.3
}
# 使用字典权重进行加权求和,并添加新列 score
df = df.assign(score=sum(df[col] * weight for col, weight in weights.items()))
print(df)
关键点说明
- 权重字典的键必须对应 DataFrame 中已存在的列名,否则会抛出 KeyError。
- 使用生成器表达式配合 sum 可以按行完成加权累加,无需显式写循环。
- assign 方法返回新的 DataFrame,原表不会被直接修改,符合函数式使用习惯。
处理缺失值的情况
如果某些列存在缺失值,可以在相乘前用 fillna 填充,避免结果变成 NaN:
df = df.fillna(0) df = df.assign(score=sum(df[col] * weight for col, weight in weights.items()))
小结
通过字典权重对 Pandas DataFrame 列进行加权求和并添加新列,核心就是利用列名与权重的映射,结合向量化运算完成计算。这种方式既简洁又方便后期调整指标权重。