Pandas GroupBy и выберите строки с минимальным значением в определенном столбце - PullRequest
0 голосов
/ 01 февраля 2019

Я группирую свой набор данных по столбцу A, а затем хотел бы взять минимальное значение в столбце B и соответствующее значение в столбце C.

data = pd.DataFrame({'A': [1, 2], 'B':[ 2, 4], 'C':[10, 4]})
data  
    A   B   C
0   1   4   3
1   1   5   4
2   1   2   10
3   2   7   2
4   2   4   4
5   2   6   6  

, и я хотел бы получить:

    A   B   C
0   1   2   10
1   2   4   4

На данный момент я группирую по A и создаю значение, которое указывает на меня строки, которые я буду хранить в моем наборе данных:

a = data.groupby('A').min()
a['A'] = a.index
to_keep = [str(x[0]) + str(x[1]) for x in a[['A', 'B']].values]
data['id'] = data['A'].astype(str) + data['B'].astype('str')
data[data['id'].isin(to_keep)]

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

1 Ответ

0 голосов
/ 01 февраля 2019

Я чувствую, что вы обдумываете это.Просто используйте groupby и idxmin:

df.loc[df.groupby('A').B.idxmin()]

   A  B   C
2  1  2  10
4  2  4   4

df.loc[df.groupby('A').B.idxmin()].reset_index(drop=True)

   A  B   C
0  1  2  10
1  2  4   4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...