Python pandas groupby rank删除索引,返回所有1
我的数据框如下所示:Python pandas groupby rank删除索引,返回所有1,python,pandas,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 J
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。我做错了什么?我认为您需要使用数字-因此似乎需要将分组放在第一列
name1
中,并返回值的秩
:
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
我认为您需要使用数字-因此似乎需要将分组放在第一列name1
,并为值返回rank
:
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