为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

动漫人物 2023-12-26 15:32:52
我有 2 个数据框df = pd.DataFrame({'Question': ['Q1', 'Q2', 'Q3'], 'Category' : ["Problem", "Problem", "Problem"], 'ScoreTruth' : [2, 9, 3], 'ScoreFalse' :[0,0,0]} )    Question    Category    ScoreTruth  ScoreFalse0   Q1          Problem          2          01   Q2          Problem          9          02   Q3          Problem          3          0dfTotal = pd.DataFrame({'Name' : ['person1', 'person2','person3'], "Q1": ["TRUE","TRUE","TRUE"] ,"Q2" : ["TRUE","FALSE",np.nan], "Q3": [np.nan,"FALSE",np.nan]})        Name      Q1      Q2      Q30     person1   TRUE    TRUE     NaN1     person2   TRUE    FALSE   FALSE2     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 Truth0     person1   TRUE    TRUE     NaN          21     person2   TRUE    FALSE   FALSE         12     person3   TRUE     NaN     NaN          1我如何考虑将dfTotal "Q1", "Q2", "Q3"值为“TRUE”的列与 Q1、Q2、Q3 中各自的索引相匹配的 ScoreTruth 值df,然后提取这些分数并对它们求和?我想要这样的输出       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                    2np.where()唯一的区别是我想对行值进行求和,而不是将 TRUE/FALSE 值设置为分数。
查看完整描述

1 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

您基本上正在研究矩阵乘法,您希望将问题的分数与 或非 相'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


查看完整回答
反对 回复 2023-12-26
  • 1 回答
  • 0 关注
  • 79 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信