pandas groupby rank удаляет индекс, возвращает все 1 - PullRequest
1 голос
/ 02 октября 2019

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

    name1  name2   value
 1  Jane   Foo     2
 2  Jane   Bar     4
 3  John   Foo     7
 4  John   Bar     1

Если я сделаю df.groupby(['name1', 'name2']).count(), я получу:

              value
name1  name2
Jane   Foo    1
Jane   Bar    1
John   Foo    1
John   Bar    1

Но я пытаюсь найти ранг каждого значения в каждоммультииндексная группа. В идеале, если я использую df.groupby(['name1', 'name2']).rank(), я должен получить:

             value
name1  name2
Jane   Foo    2
Jane   Bar    1
John   Foo    1
John   Bar    2

Но вместо этого я просто получаю:

    value
  1  1
  2  1
  3  1
  4  1

с удаленными именами сгруппированных столбцов, только индексы какиндекс и значение ранга для всех строк, равных 1. Что я делаю не так?

1 Ответ

3 голосов
/ 02 октября 2019

Я думаю, что вам нужно работать с цифрами - так что, похоже, нужно сгруппировать по первому столбцу name1 и вернуть rank для value:

df['rank'] = df.groupby('name1')['value'].rank(method='dense', ascending=False).astype(int)
print (df)
  name1 name2  value  rank
1  Jane   Foo      2     2
2  Jane   Bar      4     1
3  John   Foo      7     1
4  John   Bar      1     2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...