检查行中的 TRUE、FALSE 值,在另一个数据框中查找匹配索引,然后对 pandas 值求和

我有 2 个数据框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

我想要两个dfTotal基于分数的新列df


“Total Applicable”-> 每dfTotal行中所有得分值 (TRUE/FALSE) 的总和(忽略 NaN 值得分)以及基于dfQ1、Q2、Q3 的匹配值,即 row0 = 2+9 = 11、row1 = 2+ 9+3 = 14,行2 = 2


“Total Truth” -> 一行中所有 TRUE 得分值的总和(从 中提取的得分df)


我设法得到了第二个有点完整的结果,dfTotal['Total Truth'] = [x for x in np.sum(dfTotal.values == "TRUE", 1)]但这并没有考虑到“ScoreTruth”值df


       Name      Q1      Q2      Q3      Total Truth

0     person1   TRUE    TRUE     NaN          2

1     person2   TRUE    FALSE   FALSE         1

2     person3   TRUE     NaN     NaN          1

我如何考虑将dfTotal "Q1", "Q2", "Q3"值为“TRUE”的列与 Q1、Q2、Q3 中各自的索引相匹配的 ScoreTruth 值df,然后提取这些分数并对它们求和?


我想要这样的输出


       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

np.where()唯一的区别是我想对行值进行求和,而不是将 TRUE/FALSE 值设置为分数。



动漫人物
浏览 36回答 1
1回答

弑天下

您基本上正在研究矩阵乘法,您希望将问题的分数与 或非 相'TRUE'匹配NaN。所以:scores = df.set_index('Question')['ScoreTruth']questions = dfTotal[['Q1','Q2','Q3']]dfTotal['Total Applicable'] = questions.notna() @ scoresdfTotal['Total Truth'] = questions.eq('TRUE') @ scores输出:      Name    Q1     Q2     Q3  Total Applicable  Total Truth0  person1  TRUE   TRUE    NaN                11           111  person2  TRUE  FALSE  FALSE                14            22  person3  TRUE    NaN    NaN                 2            2
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python