#python #pandas #dataframe #group-by #multi-index
#python #pandas #фрейм данных #группировка по #многоиндексный
Вопрос:
Для фрейма данных pandas из:
import pandas as pd
df = pd.DataFrame({
'id': [1, 1, 2, 1], 'anomaly_score':[5, 10, 8, 100], 'match_level_0':[np.nan, 1, 1, 1], 'match_level_1':[np.nan, np.nan, 1, 1], 'match_level_2':[np.nan, 1, 1, 1]
})
display(df)
df = df.groupby(['id', 'match_level_0']).agg(['mean', 'sum'])
Я хочу вычислить самые большие строки для каждой группы.
df.columns = ['__'.join(col).strip() for col in df.columns.values]
df.groupby(['id'])['anomaly_score__mean'].nlargest(2)
Работает, но требует выравнивания multiindex для столбцов.
Вместо этого я хочу напрямую использовать,
df.groupby(['id'])[('anomaly_score', 'mean')].nlargest(2)
Но это не удается, так как ключ не найден.
Интересно, что он отлично работает, когда не группируется:
df[('anomaly_score', 'mean')].nlargest(2)
Ответ №1:
Для меня работает группировка Series
с помощью первого уровня MultiIndex
, но, похоже, ошибка, почему не работает, как в вашем решении:
print (df[('anomaly_score', 'mean')].groupby(level=0).nlargest(2))
id match_level_0
1 1.0 55
2 1.0 8
Name: (anomaly_score, mean), dtype: int64
print (df[('anomaly_score', 'mean')].groupby(level='id').nlargest(2))