Python 数据帧乘法中的空行为

Python 数据帧乘法中的空行为,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个问题值的数据框,VAL,以及这些问题的权重乘以VAL的数据框。VAL数据框中的每条记录对应一个用户 import pandas as pd vals = pd.DataFrame({'A1':[0,1], 'A2':[1,2], 'A3':[3,3],'A4':[4,2],'B1':[2,1]}) multiply_vals = pd.DataFrame({'Weights':[.5,.25,.75,1,.33]}, index=['A1','A2','A3','A4','B1'])

我有一个问题值的数据框,VAL,以及这些问题的权重乘以VAL的数据框。VAL数据框中的每条记录对应一个用户

import pandas as pd
vals = pd.DataFrame({'A1':[0,1], 'A2':[1,2], 'A3':[3,3],'A4':[4,2],'B1':[2,1]})
multiply_vals = pd.DataFrame({'Weights':[.5,.25,.75,1,.33]}, index=['A1','A2','A3','A4','B1'])

#vals
   A1  A2  A3  A4  B1
0   0   1   3   4   2
1   1   2   3   2   1

#Multiply Vals
    Weights
A1     0.50
A2     0.25
A3     0.75
A4     1.00
B1     0.33
我想将VAL中的每一行乘以正确的权重乘法VAL,但似乎出现了一些意外的结果,其中包含空值

预期结果:

    A1    A2    A3  A4    B1
0  0.0  0.25  2.25   4  0.66
1  0.5  0.50  2.25   2  0.33
我尝试的是: 我尝试使用以及将其与组合,但它返回空值

vals.mul(multiply_vals.T, axis=1)

         A1  A2  A3  A4  B1
0       NaN NaN NaN NaN NaN
1       NaN NaN NaN NaN NaN
Weights NaN NaN NaN NaN NaN
 
意外行为: 如果我采用完全相同的方法,但使用.values,则会有效

vals.mul(multiply_vals.T.values, axis=1)

    A1    A2    A3   A4    B1
0  0.0  0.25  2.25  4.0  0.66
1  0.5  0.50  2.25  2.0  0.33
价值观为什么起作用?
使用pandas版本“0.25.0”

将第二个列定义为一个系列,因为它只有一列,然后乘以它的转置:

import pandas as pd
vals = pd.DataFrame({'A1':[0,1], 'A2':[1,2], 'A3':[3,3],'A4':[4,2],'B1':[2,1]})
multiply_vals = pd.Series([.5,.25,.75,1,.33], index=['A1','A2','A3','A4','B1'])
vals*multiply_vals.T
    A1    A2    A3   A4    B1
0  0.0  0.25  2.25  4.0  0.66
1  0.5  0.50  2.25  2.0  0.33

您只需要乘法VAL中的值

VAL*乘以VAL.values.T

请尝试以下代码:

import pandas as pd
vals = pd.DataFrame({'A1':[0,1], 'A2':[1,2], 'A3':[3,3],'A4':[4,2],'B1':[2,1]})
multiply_vals = pd.DataFrame({'Weights':[.5,.25,.75,1,.33]}, index=['A1','A2','A3','A4','B1'])
vals2 = vals.transpose()
vals2.columns =['0', '1']
df_join = pd.merge(vals2, multiply_vals, left_index=True, right_index=True)
df_join['0 weighted'] = df_join['0']*df_join['Weights']
df_join['1 weighted'] = df_join['1']*df_join['Weights']
df_final = df_join[['0 weighted', '1 weighted']]
df_final = df_final.transpose()
df_final.head()

啊-为什么可能与系列与数据帧有关。非常有趣!这也是一个很好的选择!但当我们不使用.values时,它仍然为空。很奇怪!使用.values返回一个np.array,该数组将导致*执行元素乘法
import pandas as pd
vals = pd.DataFrame({'A1':[0,1], 'A2':[1,2], 'A3':[3,3],'A4':[4,2],'B1':[2,1]})
multiply_vals = pd.DataFrame({'Weights':[.5,.25,.75,1,.33]}, index=['A1','A2','A3','A4','B1'])
vals2 = vals.transpose()
vals2.columns =['0', '1']
df_join = pd.merge(vals2, multiply_vals, left_index=True, right_index=True)
df_join['0 weighted'] = df_join['0']*df_join['Weights']
df_join['1 weighted'] = df_join['1']*df_join['Weights']
df_final = df_join[['0 weighted', '1 weighted']]
df_final = df_final.transpose()
df_final.head()