У меня есть этот набор данных:
Id query count
001 abc 20
001 bcd 30
001 ccd 100
002 ace 13
002 ahhd 30
002 ahe 28
Я хочу найти запрос Top2 для каждого идентификатора на основе количества. Итак, я хочу увидеть:
Id query count
001 ccd 100
001 bcd 30
002 ahhd 30
002 ahe 28
Я попробовал эти две строки кода:
df.groupby('Id')['count'].nlargest(2)
, столбец «запрос» теряется в результате, а это не то, что я хотел. Так как сохранить запрос в моем результате. Количество
001 100
001 30
002 30
002 28
3 ответа
Используйте set_index
пропавших без вести колонка ( ы):
df = df.set_index('query').groupby('Id')['count'].nlargest(2).reset_index()
print (df)
Id query count
0 001 ccd 100
1 001 bcd 30
2 002 ahhd 30
3 002 ahe 28
Вы можете сделать это с groupby еще:
df.sort_values('count', ascending = False).groupby('Id').head(2)
Я использую groupby
и apply
метод pd.DataFrame.nlargest
. Это отличается от pd.Series.nlargest
тем, что мне нужно указать набор столбцов, которые следует учитывать при выборе моих n строк. Это решение сохраняет исходные значения индекса, которые прикреплены к строкам, если это вообще важно для OP или конечного пользователя.
df.groupby('Id', group_keys=False).apply(
pd.DataFrame.nlargest, n=2, columns='count')
Id query count
2 1 ccd 100
1 1 bcd 30
4 2 ahhd 30
5 2 ahe 28
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.