Reputation: 91
I am trying to determine the label name with the highest occurrence across multiple columns and set the another pandas columns with that label.
For examples, given this dataframe:
Class_1 Class_2 Class_3
0 versicolor setosa setosa
1 virginica versicolor virginica
2 virginica setosa setosa
3 versicolor setosa setosa
4 versicolor versicolor virginica
I want to add a column called Predictions per the reasoning above:
Class_1 Class_2 Class_3 Predictions
0 versicolor setosa setosa setosa
1 virginica versicolor virginica virginica
2 virginica setosa setosa setosa
3 versicolor setosa setosa setosa
4 versicolor versicolor virginica versicolor
Upvotes: 1
Views: 31
Reputation: 863166
Use value_counts
for return first index by most common value per rows with apply
and axis=1
:
df['Predictions'] = df.apply(lambda x: x.value_counts().index[0], axis=1)
print (df)
Class_1 Class_2 Class_3 Predictions
0 versicolor setosa setosa setosa
1 virginica versicolor virginica virginica
2 virginica setosa setosa setosa
3 versicolor setosa setosa setosa
4 versicolor versicolor virginica versicolor
Alternative with Counter.most_common
:
from collections import Counter
df['Predictions'] = [Counter(x).most_common(1)[0][0] for x in df.itertuples()]
print (df)
Class_1 Class_2 Class_3 Predictions
0 versicolor setosa setosa setosa
1 virginica versicolor virginica virginica
2 virginica setosa setosa setosa
3 versicolor setosa setosa setosa
4 versicolor versicolor virginica versicolor
Upvotes: 2