Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将数据帧乘以不同形状的数据帧(或系列)_Python_Pandas_Numpy_Array Broadcasting - Fatal编程技术网

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