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
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