2016-10-09 102 views
2

可以说我有一个熊猫系列:乘以大熊猫据帧和系列元素方式

import pandas as pd 
x = pd.DataFrame({0: [1,2,3], 1: [4,5,6], 2: [7,8,9] }) 
y = pd.Series([-1, 1, -1]) 

我想乘x和y以这样的方式,我得到Z:

z = pd.DataFrame({0: [-1,2,-3], 1: [-4,5,-6], 2: [-7,8,-9] }) 

在换句话说,如果该系列的元素j是-1,那么x的第j行的所有元素都乘以-1。如果该系列的元素k为1,那么x的第j行的所有元素都乘以1.

我该如何做?

+2

'x.apply(lambda col:col * y)'? – Abdou

+0

谢谢!它工作完美。 – wwl

+0

你也可以尝试'(x.T * y).T'。 – Abdou

回答

5

你可以这样做:

>>> new_x = x.mul(y, axis=0) 
>>> new_x 
    0 1 2 
0 -1 -4 -7 
1 2 5 8 
2 -3 -6 -9 
+0

谢谢!这对我也很有用。如果我们不想关心索引 –

+0

@AlexanderChervov,虽然使用了最终结果('new_x'),即使使用了'y.values,我们也可以写出new_x = x.mul(y.values,axis = 0) '包含索引 - 但是这也适用! – coder

1

由于阿卜杜指出,答案是

z = x.apply(lambda col: col*y) 

而且,如果你不是有一个数据帧,例如

y = pandas.DataFrame({"colname": [1,-1,-1]}) 

然后,你可以做

z = x.apply(lambda z: z*y["colname"]) 
0

您可以直接乘dataframes。

x * y 
+0

我刚刚再次检查,它不起作用 –

+2

这横跨行倍增;你想先转置它,再乘以再转置:'(x.T * y).T'。 – Abdou