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

Pandas列间乘法失效求助:MultiIndex DataFrame运算返回NaN

嗨,我来帮你拆解这个问题的原因和解决办法~

问题成因

你的jpy_bal是MultiIndex列结构的DataFrame,当你用iloc[:, [0]]和iloc[:, [3]]选取列时,得到的是两个单列DataFrame,它们的列索引(也就是那个双层的日期索引)完全不匹配。

pandas在执行DataFrame之间的乘法时,会严格对齐行索引+列索引:只有行和列索引都完全一致的位置,才会计算乘法结果;任何一方索引不匹配,都会生成NaN。而你要赋值的目标列(第一列),在相乘后的结果里没有匹配的列索引,所以赋值后就变成了NaN。

解决办法

这里给你几个简单有效的方案:

方案1:用Series代替DataFrame运算(最推荐)

把列选取方式从[:, [0]]改成[:, 0](去掉方括号),这样得到的是Series对象——Series只会对齐行索引(你的行索引app_vendor_id+currency在两个Series里是完全一致的),乘法会按行正确执行:

jpy_bal.iloc[:, 0] = jpy_bal.iloc[:, 0] * jpy_bal.iloc[:, 3]

方案2:直接使用数值数组跳过索引对齐

提取DataFrame底层的数值数组,不考虑索引,直接按位置相乘:

jpy_bal.iloc[:, [0]] = jpy_bal.iloc[:, [0]].values * jpy_bal.iloc[:, [3]].values

方案3:用mul方法指定对齐规则

如果一定要保留DataFrame结构,可以用mul方法,指定只对齐行索引:

jpy_bal.iloc[:, [0]] = jpy_bal.iloc[:, [0]].mul(jpy_bal.iloc[:, [3]].values, axis=0)

这三个方案都能解决你遇到的NaN问题,选最适合你代码习惯的就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:39:30