我有 2 個數(shù)據(jù)框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基于分數(shù)的新列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)我設(shè)法得到了第二個有點完整的結(jié)果,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,然后提取這些分數(shù)并對它們求和?我想要這樣的輸出? ? ? ?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()唯一的區(qū)別是我想對行值進行求和,而不是將 TRUE/FALSE 值設(shè)置為分數(shù)。
1 回答

弒天下
TA貢獻1818條經(jīng)驗 獲得超8個贊
您基本上正在研究矩陣乘法,您希望將問題的分數(shù)與 或非 相'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
添加回答
舉報
0/150
提交
取消