简体   繁体   中英

check if one dataframe values match another dataframe column then set value in dataframe column

I have a dataframe dfScore

dfScore = pd.DataFrame([["ringo", 0,0,0]], columns=["Name","Sales total","Problem total","Finance total"])

    Name  Sales total  Problem total  Finance total
0  ringo            0              0              0

and a dataframe categories

data = [["Finance total", 14], ["Sales total", 4], ["Problem total", 5]] 
categories = pd.DataFrame(data, columns = ['Category', 'ScoreTruth'])

        Category  ScoreTruth
0  Finance total          14
1    Sales total           4
2  Problem total           5

What I would like to do is check whether a value from "Category" in categories is contained in the columns of dfScores. If yes then set the value in dfScores column to "ScoreTruth" adjacent value. I've tried using isin to get the indices in dfScores column but that doesn't actually tell me which Category is which index. ie

index = np.where(dfScore.columns.isin(categories["Category"]))
print(index[0])
>>>[1 2 3]

If I try to get the index from isin the other way around I get

index2 = np.where(categories["Category"].isin(dfScore.columns))
print(index2[0])
>>>[0 1 2]

So now I thought I could do something like this dfScore.iloc[:,index[0]] = categories.iloc[index2[0]].loc["ScoreTruth"] to set the values but I get KeyError: 'ScoreTruth' Obviously this would only work if I set every row in dfScores using the index[0] anyway which is not ideal.

I would like to output a dataframe that looks like this

    Name  Sales total  Problem total  Finance total
0  ringo            4              5             14

Let's try DataFrame.assign :

s = categories.set_index('Category')['ScoreTruth']
dfScore.assign(**s[s.index.intersection(dfScore.columns)])

    Name  Sales total  Problem total  Finance total
0  ringo            4              5             14

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM