neighbornate
neighbornate

Reputation: 91

How to determine highest occurrence of categorical labels across multiple columns per row

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

Answers (1)

jezrael
jezrael

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

Related Questions