#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()