将python中索引相似的两个数据帧相乘

将python中索引相似的两个数据帧相乘,python,pandas,dataframe,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'])

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

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

一种方法是在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
调用并将序列转换为列表并传递
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

如果要将一列DF相乘而不考虑其列名,最好将其设为一个系列,这可以通过
.squence()
方法实现。然后:

>>> df1.mul(df2.squeeze(), axis='index')
      a    b    d
A   10   20   30
B   60   80  100
C  150  180  210

要获取以下输出数据帧,如上所述:

   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)

这将执行逐列乘法。

如果矩阵和向量(df2)不共享相同的索引,这将产生错误。请尝试:df2=pd.DataFrame([(10,20,30)],列=['A','C','D'],索引=['ss'])。T@AlexanderOP特别发布了两个df具有与@EdChum相同指示等级的示例。即使使用@Alexander的示例,您仍然可以删除不匹配的索引,对吗
df1.mul(df2['ss'],axis='index').dropna()
@Alexander通过使用该示例df,发布的答案都不正确,只是指出如果它们不同,此解决方案将不起作用@BrenBarn的解决方案使用替代df2定义。