我的数据框如下:
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。我在做什么错了?
答案 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