Pandas如何将每行数据与对应权重相乘求和生成新列
实现方案
假设你的数据已存储为pandas DataFrame对象,命名为df,权重已存储为numpy数组对象,命名为weights,可按以下方式实现:
- 首先确认权重的顺序和DataFrame中5个数值列从左到右的顺序一一对应
- 如果
Date字段已设为DataFrame的索引,直接执行以下代码即可生成新列:
df['weighted_sum'] = df.dot(weights)
- 如果
Date是普通列,需要先排除日期列再计算:
# 取除第一列Date外的所有数值列计算 num_cols = df.columns[1:] df['weighted_sum'] = df[num_cols].dot(weights)
补充说明
- 原始数据中全为NaN的行(如2010-01-04)计算结果会默认返回NaN,如果你需要把空值当做0计算,可以调整代码为:
# 以Date是索引的情况为例 df['weighted_sum'] = df.fillna(0).dot(weights)
- 你给出的2010-01-05行示例,用上述方法计算的结果和手动加权求和的结果完全一致。
内容的提问来源于stack exchange,提问作者Nirav Saiya
相关产品推荐
相关产品推荐

