我有两个数据帧df = pd.DataFrame({'Question': ['Q1', 'Q2', 'Q3'], 'Category' : ["Problem", "Problem", "Problem"], 'ScoreTruth' : [2, 9, 3], 'ScoreFalse' :[0,0,0]} )
Question Category ScoreTruth ScoreFalse
0 Q1 Problem 2 0
1 Q2 Problem 9 0
2 Q3 Problem 3 0
dfTotal = pd.DataFrame({'Name' : ['person1', 'person2','person3'], "Q1": ["TRUE","TRUE","TRUE"] ,"Q2" : ["TRUE","FALSE",np.nan], "Q3": [np.nan,"FALSE",np.nan]})
Name Q1 Q2 Q3
0 person1 TRUE TRUE NaN
1 person2 TRUE FALSE FALSE
2 person3 TRUE NaN NaN
我想根据df
中的分数为dfTotal
添加两个新列
“适用总额”->;基于Q1、Q2、Q3,即行0=2+9=11、行1=2+9+3=14、行2=2,每dfTotal
行(忽略NaN值分数)中的所有分数值(真/假)与df
中的匹配值之和
“完全真理”->;一行中所有真实分数值的总和(从df
提取的分数)
我设法用dfTotal['Total Truth'] = [x for x in np.sum(dfTotal.values == "TRUE", 1)]
完成了数字2,但是这没有考虑df
中的“ScoreTruth”值
Name Q1 Q2 Q3 Total Truth
0 person1 TRUE TRUE NaN 2
1 person2 TRUE FALSE FALSE 1
2 person3 TRUE NaN NaN 1
我如何考虑将值为“TRUE”的dfTotal "Q1", "Q2", "Q3"
列与其在df
Q1、Q2、Q3中的各自索引相匹配的ScoreTruth值,然后提取这些分数并求和
我想要这样的输出
Name Q1 Q2 Q3 Total Applicable Total Truth
0 person1 TRUE TRUE NaN 11 11
1 person2 TRUE FALSE FALSE 14 2
2 person3 TRUE NaN NaN 2 2
我已经看过了this post,它启发了我的解决方案,但我不确定从这里走到哪里。我还研究了this one,它看起来接近于我使用np.where()
所能做的。唯一的区别是我希望对行值求和,而不是将真/假值设置为分数
您基本上是在看矩阵乘法,您希望将问题的分数与
'TRUE'
或非NaN
匹配。因此:输出:
相关问题 更多 >
编程相关推荐