在python pandas中将两个具有相似索引的数据帧相乘

时间:2015-04-24 20:13:23

标签: python pandas dataframe

我有两个数据框,我想将它们乘以索引。最好的方法是什么? 注意:列名称不同。

df1 = pd.DataFrame([(1,2,3),(3,4,5),(5,6,7)], columns=['a','b','d'], index = ['A', 'B','C'])
df1
   a  b  d
A  1  2  3
B  3  4  5
C  5  6  7

df2 = pd.DataFrame([(10,20,30)], columns=['A','B','C'],index = ['ss'])
df2 = df2.transpose()
df2
   ss
A  10
B  20
C  30

输出数据帧:

     a   b   d
A   10  20  30
B   60  80 100
C  150 180 210

4 个答案:

答案 0 :(得分:5)

调用mul并将系列转换为列表并传递axis=0,通过转换为列表,我们忽略索引/列名称的任何对齐错误:

In [74]:

df1.mul(list(df2['ss']), axis=0)
Out[74]:
     a    b    d
A   10   20   30
B   60   80  100
C  150  180  210

修改

无需转换为列表即可直接访问该系列:

In [75]:

df1.mul(df2['ss'], axis=0)
Out[75]:
     a    b    d
A   10   20   30
B   60   80  100
C  150  180  210

答案 1 :(得分:2)

一种方法可能是在Numpy数组上繁殖,如

In [8]: pd.DataFrame(df1.values*df2.values,
                      columns=['a','b','d'], index = ['A', 'B','C'])
Out[8]:
     a    b    d
A   10   20   30
B   60   80  100
C  150  180  210

答案 2 :(得分:2)

如果要将单列DF乘以而不考虑其列名,最好将其设为系列,您可以使用a方法。然后:

.squeeze()

答案 3 :(得分:1)

获取以下输出Dataframe,如上所述:

   a    b    d
A  10   20   30
B  60   80   100
C  150  180  210

...执行以下内容:

df3 = pandas.DataFrame(df1.values*df2.values, columns=df1.columns, index=df1.index)

执行逐列乘法。