带有序列的熊猫数据框的按列乘法(索引不匹配)

时间:2018-06-21 15:22:26

标签: python pandas

我想使用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”时,乘法有效,但这不是解决方案,因为序列的顺序可能会更改)

1 个答案:

答案 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)