我想使用python的pandas进行一些简单的矩阵计算,并在尝试执行以下简单乘法时遇到一个问题:
df = df.mul(column, axis=1)
df是一个3x3数据帧,看起来像:
441090707 441090801 441090408
441090408 0.255061 0.202650 0.689114
441090707 0.287952 0.218351 0.116750
441090801 0.456987 0.578998 0.194136
而专栏是一个系列,看起来像:
area
441090707 179.727362
441090801 698.939741
441090408 1377.909774
Name: Test, dtype: float64
乘法将引发RuntimeWarning(在'str'和'int'的实例之间不支持'<',对于不可比对象,排序顺序未定义)并返回以下内容:
441090707 441090801 ... 441090801 441090408
441090408 NaN NaN ... NaN NaN
441090707 NaN NaN ... NaN NaN
441090801 NaN NaN ... NaN NaN
由于文档指出“不匹配的索引将合并在一起”,因此我的索引似乎有问题。 但是我不知道如何使系列索引与dataframe-列匹配。
(当我使用“ column.values”时,乘法有效,但这不是解决方案,因为序列的顺序可能会更改)
答案 0 :(得分:1)
Pandas在幕后使用numpy,因此您只需将它们乘以矩阵即可。使用虚拟案例:
import pandas as pd
df=pd.DataFrame({'a':[1,2,3],'b':[4,5,6],'c':[7,8,9]})
cl=pd.Series([1,2,3])
ans=df.values @ cl
您只需要使用values
来获取二维numpy数组。
编辑
因此,顶部并不是您真正想要的。您需要元素乘法,但问题是数据框和序列的索引具有不同的顺序。由于使用values
已经可行,所以我认为这意味着您具有相同数量的索引,并且没有丢失索引。您只需要reindex
您的专栏
ans=df.mul(cl.reindex(df.index).values,axis=1)