同维度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
相关产品推荐
相关产品推荐

