pandas 数据帧按列相乘,索引匹配

pandas dataframe multiplication by column, with index matched

df1=pd.DataFrame(np.random.randn(6,3),index=list("ABCDEF"),columns=list("XYZ"))
df2=pd.DataFrame(np.random.randn(6,1),index=list("ABCDEF"))

我想将 df1 的每一列与 df2 相乘,并通过索引标签进行匹配。这意味着:

df1["X"]*df2
df1["Y"]*df2
df1["Z"]*df2

输出将包含 df1 的索引和列。

我该怎么做?试了好几种方法还是不行...

使用mul function and multiple DataFrame by Series (column) select by position with iloc:

print(df1.mul(df2.iloc[:,0], axis=0))
          X         Y         Z
A -0.577748  0.299258 -0.021782
B -0.952604  0.024046 -0.276979
C  0.175287  2.507922  0.597935
D -0.002698  0.043514 -0.012256
E -1.598639  0.635508  1.532068
F  0.196783 -0.234017 -0.111166

详情:

print(df2.iloc[:, 0])
A   -2.875274
B    1.881634
C    1.369197
D    1.358094
E   -0.024610
F    0.443865
Name: 0, dtype: float64

您可以使用 apply 将 df1 中的每一列与 df2 相乘。

df1.apply(lambda x: x * df2[0], axis=0)

          X         Y         Z
A -0.437749  0.515611 -0.870987
B  0.105674  1.679020 -0.693983
C  0.055004  0.118673 -0.028035
D  0.704775 -1.786515 -0.982376
E  0.109218 -0.021522 -0.188369
F  1.491816  0.105558 -1.814437