2017-02-13 2 views
2

У меня есть dataframe, где я хочу, чтобы выбрать все строки, которыеКак выбрать строки в Dataframe с максимальным значением в столбце

df = A B C D 
    'a' 1 1 1 
    'b' 1 2 1 
    'c' 1 1 1 
    'a' 1 2 2 
    'a' 2 2 2 
    'b' 1 2 2 

И я хочу, чтобы получить строки, где значение в одном столбце является максимальным для этой группы. Таким образом, для приведенного выше примера, если я хотел группе быть «A» и «B» и получить те строки, которые имеют наибольшее значение в «C»

df = A B C D 
    'a' 1 2 2 
    'b' 1 2 2 
    'c' 1 1 1 
    'a' 2 2 2 

Я знаю, что я хочу использовать groupby, но я «Не знаю, что делать после этого.

ответ

1

Самый простой способ - использовать функцию преобразования. Это в основном позволяет применить функцию к группе, которая сохраняет тот же индекс, что и исходный фрейм данных. В этом случае, вы можете увидеть, вы получаете следующие из преобразования

In [13]: df.groupby(['A', 'B'])['C'].transform(max) 
Out[13]: 
0 2 
1 2 
2 1 
3 2 
4 2 
5 2 
Name: C, dtype: int64 

Это имеет тот же индекс, что и оригинальный dataframe, так что вы можете использовать его, чтобы создать фильтр.

df[df['C'] == df.groupby(['A', 'B'])['C'].transform(max)] 
Out[11]: 
    A B C D 
1 b 1 2 1 
2 c 1 1 1 
3 a 1 2 2 
4 a 2 2 2 
5 b 1 2 2 

Для более подробной информации по этому вопросу см the pandas groupby documentation, который отлично.