如何将列乘以DataFrame中的第一列?

时间:2019-07-05 19:36:28

标签: python-3.x pandas

我在调查中为每个参与者应用了绩效排名。 我现在想将他们各自的等级应用于他们的问题回答(+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列

1 个答案:

答案 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作为上面示例中的值之一的列。

希望这会有所帮助。让我知道你是否懂了:))