1 Вопрос: Есть ли способ найти расположение первых n элементов в группе по

вопрос создан в Thu, May 2, 2019 12:00 AM

Необходимо извлечь атрибут из верхних n элементов кадра данных pandas

входные данные как показано ниже

    KEY variable    value
0   1   A   0.476970
101 1   B   0.513333
202 1   C   0.376970
203 2   B   0.5667
101 2   A   0.513333
202 2   C   0.376970

...

Мне нужно положить в топ-2, как это

KEY variable    value
1   A   0.476970
1   B   0.513333
2   B   0.5667
2   A   0.513333
...

код, который я пробовал, выглядит следующим образом

test=pred_melt.groupby(['KEY'])['value'].nlargest(2)

это дает мне

KEY     
1          101    0.513333
           0      0.476970
...
Name: value, Length: 198, dtype: float64
Идея

заключалась в том, чтобы объединить оригинал с индексом (101,0 и т. д.), чтобы добавить столбец переменной, но не может получить индекс из нужного результата, как указано выше. не группировка по столбцу является ключом, а не переменная.

    
0
  1. Что означает «top»? В предоставленном вами примере вывода значения не сортируются в любом порядке.
    2019-05-02 15: 42: 54Z
  2. сверху я имею в виду самое большое 2 по значению. в этом примере .51 и .47 - самые большие значения для ключа = 1
    2019-05-02 17: 14: 03Z
  3. Хорошо. Так вы хотите индекс test? Если это так, вы можете использовать test.index.
    2019-05-02 17: 45: 41Z
1 ответ                              1                         

Спасибо Supratim, да, индекс, но я добавил остальные детали, которые мне пришлось потренироваться. пожалуйста, прокомментируйте, если считаете нужным.

test=pred_melt.groupby(['KEY'])['value'].nlargest(2)
test.index

возвращает MultiIndex согласно https://pandas.pydata.org/pandas-docs/stable/user_guide /advanced.html структура

 MultiIndex(levels=[...], [...]],
            codes=[[...], [..]],
            names=[...])

Я заинтересован в

test.index.levels[1]

который дает мне второй столбец этого

KEY     
1          101    0.513333
           0      0.476970
...
Name: value, Length: 198, dtype: float64

как 0,101 и т. д., которые можно использовать для получения записей из pred_melt

    KEY variable    value
0   1   A   0.476970
101 1   B   0.513333
202 1   C   0.376970
203 2   B   0.5667
101 2   A   0.513333
202 2   C   0.376970

а р>

pred_melt.iloc[test.index.levels[1]]
    
0
2019-05-03 10: 38: 41Z
  1. Отлично. Спасибо @P RAY за добавление остальной части решения!
    2019-05-10 15: 30: 42Z
источник размещен Вот