Pandas如何实现DataFrame与另一DataFrame单行按列匹配相乘
问题原因
你运行代码得到全NaN结果,核心是两个匹配规则不满足:
- 两个DataFrame行索引未对齐:df1共4行、df2仅1行,pandas默认按行索引逐行匹配计算,匹配不到的位置直接返回空值
level参数仅适用于多层索引场景,你当前使用的两个DataFrame都没有多层列索引,参数无效;同时df2包含Year列,和df1的列名无法完全匹配,进一步产生空值。
正确实现方案
你只需要把df2的权重值提取为对应列的Series,利用pandas的广播特性逐行相乘即可,参考实现如下:
# 第一步:提取df2中2020年对应的权重,生成与df1指标列对应的Series weights = df2.loc[df2['Year']==2020, ['ABC','DEF','XYZ']].iloc[0] # 第二步:复制df1的Date列,对应指标列乘以权重 df3 = df1.copy() df3[['ABC','DEF','XYZ']] = df1[['ABC','DEF','XYZ']] * weights
如果要使用mul方法实现,写法如下:
df3 = df1.copy() df3[['ABC','DEF','XYZ']] = df1[['ABC','DEF','XYZ']].mul(df2[['ABC','DEF','XYZ']].iloc[0], axis=1)
两种写法运行后得到的结果都和你期望的一致:2020-01-31对应指标值为1.5、1.6、0.6,其余行按相同规则计算。
内容的提问来源于stack exchange,提问作者heff
相关产品推荐
相关产品推荐

