Pandas 每行的按元素乘法

Pandas 每行的按元素乘法,pandas,dataframe,series,multiplication,elementwise-operations,Pandas,Dataframe,Series,Multiplication,Elementwise Operations,我有两个DataFrame对象,我想在每一行上应用元素乘法: df_prob_wc.shape # (3505, 13) df_prob_c.shape # (13, 1) 我想我可以用DataFrame.apply() 这给了我: TypeError: ("'int' object is not iterable", 'occurred at index $') TypeError: 'int' object is not iterable 或与 df_prob_wc.apply(

我有两个
DataFrame
对象,我想在每一行上应用元素乘法:

df_prob_wc.shape  # (3505, 13)
df_prob_c.shape   # (13, 1)
我想我可以用
DataFrame.apply()

这给了我:

TypeError: ("'int' object is not iterable", 'occurred at index $')
TypeError: 'int' object is not iterable
或与

df_prob_wc.apply(lambda x: x * df_prob_c, axis=1)
这给了我:

TypeError: ("'int' object is not iterable", 'occurred at index $')
TypeError: 'int' object is not iterable
但它不起作用。 但是,我可以这样做:

df_prob_wc.apply(lambda x: x * np.asarray([1,2,3,4,5,6,7,8,9,10,11,12,13]), axis=1)

我做错了什么?

似乎您需要使用
df\u prob\u c
by
iloc
创建多个by
Series

df_prob_wc = pd.DataFrame({'A':[1,2,3],
                   'B':[4,5,6],
                   'C':[7,8,9],
                   'D':[1,3,5],
                   'E':[5,3,6],
                   'F':[7,4,3]})

print (df_prob_wc)
   A  B  C  D  E  F
0  1  4  7  1  5  7
1  2  5  8  3  3  4
2  3  6  9  5  6  3

df_prob_c = pd.DataFrame([[4,5,6,1,2,3]])
#for align data same columns in both df
df_prob_c.index = df_prob_wc.columns
print (df_prob_c)
   0
A  4
B  5
C  6
D  1
E  2
F  3

print (df_prob_wc.shape)
(3, 6)
print (df_prob_c.shape)
(6, 1)
另一种解决方案是通过
numpy数组
,只需要
[:,0]
选择:

print (df_prob_wc.mul(df_prob_c.values[:,0], axis=1))

    A   B   C  D   E   F
0   4  20  42  1  10  21
1   8  25  48  3   6  12
2  12  30  54  5  12   9
另一个解决方案是:


美好的在我的例子中,我只需要转换
df\u prob\u c
就可以了:
df\u prob\u wc.mul(df\u prob\u c.T.iloc[0],axis=1)
。我提出的解决方案是
df_prob_wc.apply(lambda x:x*df_prob_c.T.as_matrix()[0],axis=1)
,但您的解决方案当然要简单得多。谢谢是的,在这里应用要慢得多,最好是使用
mul
。现在我更改解决方案,您需要
df_prob\u wc.mul(df_prob\u c.iloc[:,0],axis=1)
感谢您的解释!
print (df_prob_wc.mul(df_prob_c.squeeze(), axis=1))
    A   B   C  D   E   F
0   4  20  42  1  10  21
1   8  25  48  3   6  12
2  12  30  54  5  12   9