检查行中的真、假值,在另一个数据帧中查找匹配的索引,然后求和值

2024-10-01 02:18:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧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添加两个新列

  1. “适用总额”->;基于Q1、Q2、Q3,即行0=2+9=11、行1=2+9+3=14、行2=2,每dfTotal行(忽略NaN值分数)中的所有分数值(真/假)与df中的匹配值之和

  2. “完全真理”->;一行中所有真实分数值的总和(从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"列与其在dfQ1、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()所能做的。唯一的区别是我希望对行值求和,而不是将真/假值设置为分数


Tags: namefalsetruedfnpnan分数problem
1条回答
网友
1楼 · 发布于 2024-10-01 02:18:54

您基本上是在看矩阵乘法,您希望将问题的分数与'TRUE'或非NaN匹配。因此:

scores = df.set_index('Question')['ScoreTruth']

questions = dfTotal[['Q1','Q2','Q3']]

dfTotal['Total Applicable'] = questions.notna() @ scores
dfTotal['Total Truth'] = questions.eq('TRUE') @ scores

输出:

      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

相关问题 更多 >