Получить минимальное значение из индекса во фрейме данных - PullRequest
0 голосов
/ 25 октября 2018

У меня есть такой фрейм данных.

column1 column2

1         2
1         3
1         4
2         3
2         1
2         4

Я хотел бы получить минимальные значения для каждого значения в столбце 1.Таким образом, мой вывод будет

column1    column2
1             2
2             1

Когда я пытаюсь код

df = df[df['column2'].isin(df.groupby('column1').idxmin(['column2']).values)]

Это дает мне пустой фрейм данных, и если я пытаюсь

a = df[df['column2'].isin(df.groupby('column1').min()['column2'].values)]

, он удаляет некоторыеценности, по причинам, которые я не понимаю.

Я использую Python 2.7

1 Ответ

0 голосов
/ 25 октября 2018

Функция DataFrameGroupBy.idxmax возвращает значения индекса минимальных значений столбца column2 для групп, поэтому необходимо loc для выбора:

df = df.loc[df.groupby('column1')['column2'].idxmin()]
print (df)
   column1  column2
0        1        2
4        2        1

Другим решением является использование sort_values с drop_duplicates:

df = df.sort_values('column2', ascending=False).drop_duplicates('column1', keep='last')

РЕДАКТИРОВАТЬ:

Если возможно несколько минимальных значений и хотите выбратьвсе они используют GroupBy.transform с boolean indexing:

print (df)
   column1  column2
0        1        2
1        1        3
2        1        4
3        2        1
4        2        1
5        2        4


df2 = df[df.groupby('column1')['column2'].transform('min') == df['column2']]
print (df2)
   column1  column2
0        1        2
3        2        1
4        2        1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...