pandas получить строку с минимальным значением столбца на группу - PullRequest
1 голос
/ 22 января 2020

Я хочу получить все строки с минимальным значением столбца на группу,

пример:

df = pd.DataFrame({'asset_symbol': ['100', '100', '100', '1015', '1015'],
 'percent_thresh': [0.75, 0.85, 0.95, 0.75, 0.85],
 'rank': [7.0, 7.0, 4.0, 2.0, 3.0]})

+--------------+----------------+------+
| asset_symbol | percent_thresh | rank |
+--------------+----------------+------+
| 100          | 0.75           | 7    |
+--------------+----------------+------+
| 100          | 0.85           | 7    |
+--------------+----------------+------+
| 100          | 0.95           | 4    |
+--------------+----------------+------+
| 1015         | 0.75           | 2    |
+--------------+----------------+------+
| 1015         | 0.85           | 3    |
+--------------+----------------+------+

желаемая таблица:

+--------------+----------------+------+
| asset_symbol | percent_thresh | rank |
+--------------+----------------+------+
| 100          | 0.95           | 4    |
+--------------+----------------+------+
| 1015         | 0.75           | 2    |
+--------------+----------------+------+

моя попытка было:

def max_row(df, column):
    return df.loc[df[column].idxmin()]

df.groupby('asset_symbol').apply(max_row, 'rank')

однако я обычно воздерживаюсь от применения apply

Ответы [ 2 ]

2 голосов
/ 22 января 2020

IIU C,

df.loc[df.groupby('asset_symbol')['rank'].idxmin()]

Выход:

asset_symbol  percent_thresh  rank
2          100            0.95   4.0
3         1015            0.75   2.0
1 голос
/ 22 января 2020

Давайте сделаем sort_values + drop_duplicates

df.sort_values('rank').drop_duplicates('asset_symbol')
  asset_symbol  percent_thresh  rank
3         1015            0.75   2.0
2          100            0.95   4.0
...