You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 02:36:03