我在调查中为每个参与者应用了绩效排名。 我现在想将他们各自的等级应用于他们的问题回答(+1到-1) 我有2个数据帧
> df1
SetAScore rank_A
689964 0.90 1.000000
689966 0.65 0.771845
689967 0.65 0.771845
689968 0.55 0.286408
689970 0.55 0.286408
> df2
Participant response-1-quantised response-101-quantised
689964 1 -1
689966 1 -1
我要寻找的最终结果是:
参与者响应-1-量化响应-101量化
689964 1 -1 (已编辑) 689966 0.771845 -0.771845 (已编辑)
维护df2的结构,该结构具有120个问题回复列和113行(每个参与者1行)。
我看到“密钥”是“参与者”号码
我也尝试将'rank_A'列引入df2并执行简单的乘法,但没有成功。
我的理学硕士将为您提供任何帮助
(抱歉,格式,我是菜鸟)如果可以,我可以共享图像。谢谢!
编辑----
我想我已经在@joe的帮助下解决了(感谢Joe!)
for col in b_test:
result_df[col] = [a*b for a,b in zip(set_rank['rank_A'].values.tolist(),b_test[col].values.tolist())]
result_df[col] = [a*b for a,b in zip(set_rank['rank_A'].values.tolist(),b_test[col].values.tolist())]
这似乎奏效了,因为我不得不遍历n列
答案 0 :(得分:0)
您需要使用.isin()
通过df1
中的Participant
列过滤Participant
df2
列。
然后将剩余的列相乘。
#to filter
df1 = df1.loc[df1['Participant'].isin(df2['Participant'].values.tolist())]
#do the multiplication
result_df = pd.DataFrame()
result_df['Participant'] = df1['Participant'].values.tolist()
result_df['Response Positive'] = [a*b for a,b in zip(df1['Score'].values.tolist(),df2['Positive Multiplier'].values.tolist())]
result_df['Response Negative'] = [a*b for a,b in zip(df1['Score'].values.tolist(),df2['Negative Multiplier'].values.tolist())]
您的new_df
现在将获得您想要的结果。
请注意,Positive Multiplier
是其中包含1
的列,而Negative Multiplier
是其中具有-1
的列。根据原始数据框的列名称在代码中进行更改,我只是用它来澄清要使用的列。我希望不会让您感到困惑。
相反,Score
是带有0.90
作为上面示例中的值之一的列。
希望这会有所帮助。让我知道你是否懂了:))