亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

檢查行中的 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 關注
  • 139 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號