Python 数据帧乘法中的空行为
我有一个问题值的数据框,VAL,以及这些问题的权重乘以VAL的数据框。VAL数据框中的每条记录对应一个用户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'])
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()