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

同维度Pandas DataFrame按行相乘遇异常:NaN或自乘问题求助

解决Pandas DataFrame按元素相乘的问题

问题分析

你遇到的两个问题原因很明确:

  • 第一种方法全NaN:只对齐了行索引,但列名未匹配,Pandas元素相乘会同时按行索引和列名对齐,列名不对应时就会填充NaN。
  • 第二种方法得到df2*df2:apply(lambda row: row*row, axis=1)本身就是让df2每行自乘,和df1完全无关,逻辑用错了。

正确解决方案

1. 先确保列名完全一致

先检查两个DataFrame的列名是否匹配:

print(df1.columns.equals(df2.columns))

如果返回False,把df2的列名改成和df1一致:

df2.columns = df1.columns

2. 直接执行元素相乘

列名匹配后,直接用乘法运算符或mul方法即可:

# 方法1:直接用*运算符
df_result = df1 * df2

# 方法2:用mul方法明确指定按轴对齐(可选,更清晰)
df_result = df1.mul(df2, axis=0)

两种方法都会实现对应位置的元素相乘,因为维度一致且列名对齐,不会出现NaN或错误自乘的情况。

错误代码解析

  • 错误代码1:

    df2 = df2.set_index(df1.index)
    df1 = df1 * df2
    

    仅对齐行索引没用,列名不匹配的话,Pandas找不到对应列的元素,结果全为NaN。

  • 错误代码2:

    df1 = df2.apply(lambda row:row*row,axis = 1)
    

    这里的row*row是让df2的每行元素自己乘自己,完全没用到df1,自然得到df2*df2的结果。

内容的提问来源于stack exchange,提问作者geaa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:05:31