Получить значение столбца, соответствующее idxmax, из другого столбца в группе - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть фрейм данных, состоящий из 3 столбцов и n строк.

Мой фрейм данных перед группировкой выглядит как

Index    Max_Mass (kg/m)    Max_Diameter (m)
1             10                   1
2             20                   2
3             30                   3

200           5                    4
201           60                   3
202           20                   2

300           90                   1
301           3                    1
302           10                   1

400           100                  1
401           10                   1
402           10                   1

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

groups = output_df.groupby(pd.cut(output_df.index, range(0,len(output_df), 100)))

Я использую приведенное ниже, чтобы найти максимальные значения столбца «Макс. масса (кг / м)»:

groups.max()['Max Mass (kg/m)']

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

(groups.max()['Max Mass (kg/m)']).getidx()

Мой ожидаемый результат (для DataFrame выше)будет

Мой новый фрейм данных, который я хочу создать, должен выглядеть так:

Index    Max_Mass (kg/m)    Max_Diameter (m)
3             30                   3
201           60                   3
300           90                   1
400           100                  1

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Комментарии вписаны.

# Initialise the grouper.
grouper = df.Index // 100
# Get list of indices corresponding to the max using `apply`.
idx = df.groupby(grouper).apply(
          lambda x: x.set_index('Index')['Max_Mass (kg/m)'].idxmax())
# Compute the max and update the other columns based on `idx` computed previously.
v = df.groupby(grouper, as_index=False)['Max_Mass (kg/m)'].max()
v['Index'] = idx.values
v['Max_Diameter (m)'] = df.loc[df.Index.isin(v.Index), 'Max_Diameter (m)'].values

print(v)
   Max_Mass (kg/m)  Index  Max_Diameter (m)
0               30      3                 3
1               60    201                 3
2               90    300                 1
3              100    400                 1
0 голосов
/ 11 декабря 2018

Вместо использования groups.max () вы можете использовать groups.idxmax().Затем используйте индекс, чтобы получить максимальные значения.Теперь у вас есть все, что вам нужно.

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