Pandas rank 指定顺序
Pandas rank specify order
我想在 pandas 中指定排名顺序。我知道你可以做到:
df.groupby([x, y]).rank(ascending=False)
问题 1
如何在 agg 方法中指定排名顺序(升序=False):
df.groupby([x, y]).agg({
('r', 'c'): 'rank'
})
问题二
df.groupby([x, y])['r', 'c'].rank(ascending=False)
抛出错误:KeyError: Columns not found
如何为排名指定多级列?
数据结构如下:
r
c
z x y
1 2016-11-01 00:00:00+00:00 3121 143
3923 11
3953 4
4880 12
我认为你可以使用:
x = 'x'
y = 'y'
b = df[('r','c')].groupby(level=[x, y]).rank(ascending=False)
print (b)
z x y
1 2016-11-01 00:00:00+00:00 3121 1.0
3923 1.0
3953 1.0
4880 1.0
Name: (r, c), dtype: float64
或者需要tuple
- 在最后加上,
:
x = 'x'
y = 'y'
b = df.groupby(level=[x, y])[('r','c'), ].rank(ascending=False)
print (b)
r
c
z x y
1 2016-11-01 00:00:00+00:00 3121 1.0
3923 1.0
3953 1.0
4880 1.0
#print (df)
我想在 pandas 中指定排名顺序。我知道你可以做到:
df.groupby([x, y]).rank(ascending=False)
问题 1
如何在 agg 方法中指定排名顺序(升序=False):
df.groupby([x, y]).agg({
('r', 'c'): 'rank'
})
问题二
df.groupby([x, y])['r', 'c'].rank(ascending=False)
抛出错误:KeyError: Columns not found
如何为排名指定多级列?
数据结构如下:
r
c
z x y
1 2016-11-01 00:00:00+00:00 3121 143
3923 11
3953 4
4880 12
我认为你可以使用:
x = 'x'
y = 'y'
b = df[('r','c')].groupby(level=[x, y]).rank(ascending=False)
print (b)
z x y
1 2016-11-01 00:00:00+00:00 3121 1.0
3923 1.0
3953 1.0
4880 1.0
Name: (r, c), dtype: float64
或者需要tuple
- 在最后加上,
:
x = 'x'
y = 'y'
b = df.groupby(level=[x, y])[('r','c'), ].rank(ascending=False)
print (b)
r
c
z x y
1 2016-11-01 00:00:00+00:00 3121 1.0
3923 1.0
3953 1.0
4880 1.0
#print (df)