Подсчет вхождений в кадре данных

#python #python-3.x #pandas

Вопрос:

У меня есть df, как сказать:

 value     id
 0        ABC
 1        ABC
 0        DAX
 0        ABC
 1        YTY
 

Итак, value является логическим и id является строкой, существует более 100 различных строк.

Как я могу отфильтровать или сгруппировать этот df, чтобы получить идентификатор с наибольшим количеством значений «0», идентификатор с наибольшим количеством значений «1» и так далее…

Ответ №1:

Вы можете использовать .value_counts() , как показано ниже:

 df.value_counts()
 

По умолчанию уже используется сортировка по вхождениям в порядке убывания. Таким образом, вы можете просто обратиться к первой записи id под каждым value , чтобы получить то, что вы хотите:

 value  id 
0      ABC    2
       DAX    1
1      ABC    1
       YTY    1
dtype: int64

 

Если вы хотите показать только максимальное id значение для каждого value , вы также можете использовать:

 df.value_counts().reset_index(level=1, name='count').groupby(level=0).first()
 
         id  count
value            
0      ABC      2
1      ABC      1
 

Ответ №2:

Попробуйте с

 pd.crosstab(df.id,df.value).idxmax()