Получить idxmax или idxmin столбца с кортежем в панде - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть оценка с кортежем, и я хотел бы получить строку, соответствующую максимальному значению.Вот пример того, что я хотел бы сделать:

import pandas as pd
df = pd.DataFrame({'id': ['a', 'a', 'b', 'b'], 
                   'score': [(1,1,1), (1,1,2), (0, 0, 100), (8,8,8)], 
                   'numeric_score': [1, 2, 3, 4],
                   'value':['foo', 'bar', 'baz', 'qux']})
# Works, gives correct result:
correct_df = df.loc[df.groupby('id')['numeric_score'].idxmax(), :]
# Fails with a TypeError
goal_df = df.loc[df.groupby('id')['score'].idxmax(), :] 

correct_df имеет результат, который я хотел бы получить в goal_df.Это приводит к множеству ошибок, ядро ​​которых выглядит так:

TypeError: reduction operation 'argmax' not allowed for this dtype

Рабочее, но уродливое решение:

best_scores = df.groupby('id')['score'].max().reset_index()[['id', 'score']]
goal_df = (pd.merge(df, best_scores, on=['id', 'score'])
           .groupby(['id'])
           .first()
           .reset_index())

Есть лигладкая версия этого?

1 Ответ

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

Я понимаю, что ваш вопрос:

"NumPy's .argmax() не работает для кортежей. Для серии кортежей как определить индекс для максимально значимого кортежа?"

IIUC, это вернет желаемый результат:

df.loc[df.score == df.score.max()]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...