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

检查行中的 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 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号