Python 将数据帧乘以不同形状的数据帧(或系列)
我有这样的数据框架:Python 将数据帧乘以不同形状的数据帧(或系列),python,pandas,numpy,array-broadcasting,Python,Pandas,Numpy,Array Broadcasting,我有这样的数据框架: 1 2 1 3 1 4 2 4 5 1 1 4 1 3 5 3 1 4 1 3 1 3 1 4 另一个像这样的 1 1 0 0 0 0 我想把它们乘以我得到的 1 2 0 0 0 0 2 4 0 0 0 0 1 3 0 0 0 0 1 3 0 0 0 0 因此,第二个df中的每列值都是1,每列值都是1,而第一个数据帧中的所有列值都是0。可能最容易使用底层数组,让numpy发挥它的
1 2 1 3 1 4
2 4 5 1 1 4
1 3 5 3 1 4
1 3 1 3 1 4
另一个像这样的
1 1 0 0 0 0
我想把它们乘以我得到的
1 2 0 0 0 0
2 4 0 0 0 0
1 3 0 0 0 0
1 3 0 0 0 0
因此,第二个df中的每列值都是1,每列值都是1,而第一个数据帧中的所有列值都是0。可能最容易使用底层数组,让
numpy
发挥它的广播魔力:
>>> df1.values * df2.values
array([[1, 2, 0, 0, 0, 0],
[2, 4, 0, 0, 0, 0],
[1, 3, 0, 0, 0, 0],
[1, 3, 0, 0, 0, 0]])
您可以使用以下方法将其放回到与df1
列相同的数据帧中:
>>> pd.DataFrame(df1.values * df2.values, columns=df1.columns)
0 1 2 3 4 5
0 1 2 0 0 0 0
1 2 4 0 0 0 0
2 1 3 0 0 0 0
3 1 3 0 0 0 0
或者如果您不介意覆盖df1
:
>>> df1[:] = df1.values * df2.values
>>> df1
0 1 2 3 4 5
0 1 2 0 0 0 0
1 2 4 0 0 0 0
2 1 3 0 0 0 0
3 1 3 0 0 0 0
或者,如果您愿意,您可以使用np.broadcast\u to
,享受一些乐趣:
>>> df1*np.broadcast_to(df2,df1.shape)
0 1 2 3 4 5
0 1 2 0 0 0 0
1 2 4 0 0 0 0
2 1 3 0 0 0 0
3 1 3 0 0 0 0
使用
pandas
mul
df1.mul(df2.T[0])
Out[22]:
1 2 3 4 5 6
0 1 2 0 0 0 0
1 2 4 0 0 0 0
2 1 3 0 0 0 0
3 1 3 0 0 0 0