Как я могу получить первый ряд каждой группы после использования groupby в пандах? - PullRequest
0 голосов
/ 07 октября 2018

У меня есть датафрейм pandas со столбцами X, Y, Z.Мне нужно получить maximum из Z для каждого значения X, а также мне нужно сохранить соответствующие значения столбца Y.

Я пробовал следующий код:

s_pts = inv_trans_df.groupby(['X', 'Y'])['Z'].max()

Когда я запускаю этот код, вывод, который я получаю,

enter image description here

Вместо этого я хочу, чтобы это было похоже на

0.62933 |0,68162 |0,27078

0,62938 |0,68136 |0,26827

Ответы [ 2 ]

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

Вы можете отсортировать по значению, а затем отбросить дубликаты по первой из ваших серий индексации:

df = pd.DataFrame({'col1': list('ABAB'*3),
                   'col2': list('XYYX'*3),
                   'col3': list(range(12))})

res = df.sort_values('col3', ascending=False)\
        .drop_duplicates('col1')

print(res)

   col1 col2  col3
11    B    X    11
10    A    Y    10
0 голосов
/ 07 октября 2018

Вы можете сделать индекс строк, которые имеют максимальное значение Z для каждого X, следующим образом:

idx = inv_trans_df.groupby(['X'])['Z'].transform(max) == inv_trans_df['Z']

Тогда этот индекс даст вам каждую строку, которая имеет максимальное значение Z для данного X, и выздесь можно выбрать Y или все, что вы хотите сделать.

inv_trans_df[idx]

Обратите внимание, что при этом будут сохранены любые дубликаты - если значение X имеет максимальное значение Z, которое встречается более одного раза, все совпадающие максимальные значенияпоявится в результате.То, как вы справитесь с этим, будет зависеть от вашей реальной цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...