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

Python pandas实现列值与行数据相乘 解决结果大量NaN问题

问题根源
  • pandas执行*算术运算时默认会按行索引、列索引双对齐,只有两边索引完全匹配的单元格才会计算,索引不匹配的位置直接返回NaN。
  • 你代码里的df2.transpose()是无效操作:一维Series不存在行列维度的区别,转置后还是长度为9的一维结构,根本不是你预期的1行9列二维数组,自然没法触发你想要的广播乘法。小数据集下偶尔计算正确,只是刚好部分索引碰巧匹配,不是写法本身正确。
可直接复用的正确写法

优先选第一种,大数据集下性能最高,也不会触发索引对齐导致的NaN问题:

写法1:直接调用底层numpy数组做广播运算(推荐)

绕开pandas的索引对齐逻辑,直接用numpy原生广播实现逐元素相乘,速度最快:

import pandas as pd

days = [1, 2, 3]
time = [2, 4, 2, 4, 2, 4, 2, 4, 2]

df1 = pd.DataFrame(days)
s2 = pd.Series(time)

# 3行1列的数组乘长度9的一维数组,numpy自动广播为3行9列
df3 = pd.DataFrame(df1.to_numpy() * s2.to_numpy())

写法2:显式调整维度后运算

如果你需要保留pandas对象的索引,手动给一维列数据增加维度后再计算:

import pandas as pd
import numpy as np

days = [1, 2, 3]
time = [2, 4, 2, 4, 2, 4, 2, 4, 2]

s1 = pd.Series(days)
s2 = pd.Series(time)

# 给s1增加列维度,从(3,)变成(3,1),和(9,)的s2运算时自动广播
df3 = pd.DataFrame(s1.to_numpy()[:, np.newaxis] * s2.to_numpy())
运行结果

两种写法输出的df3完全匹配你的预期:

0   1  2   3  4   5  6   7  8
0  2   4  2   4  2   4  2   4  2
1  4   8  4   8  4   8  4   8  4
2  6  12  6  12  6  12  6  12  6

提示:如果你的原始数据带自定义索引,运算前可以先把索引保存下来,算完再赋值回结果DataFrame即可,不要直接拿带不匹配索引的pandas对象直接做乘法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:03:34