熊猫groupby rank删除索引,返回全1

时间:2019-10-02 05:40:07

标签: python pandas

我的数据框如下:

    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 个答案:

答案 0 :(得分:3)

我认为您需要使用数字-因此似乎需要将第一列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