首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >pandas从groupby多列中获得1个排名

pandas从groupby多列中获得1个排名
EN

Stack Overflow用户
提问于 2019-02-22 06:35:45
回答 1查看 1.4K关注 0票数 3

有没有可能做这样的事情

代码语言:javascript
复制
df = pd.DataFrame({
    "sort_by": ["a","a","a","a","b","b","b", "a"],
     "x": [100.5,200,200,500,1,2,3, 200],
     "y": [4000,2000,2000,1000,500.5,600.5,600.5, 100.5]
})
df = df.sort_values(by=["x","y"], ascending=False)

其中我可以按sort_by列排序,并使用x和y来查找排名(使用y来打破平局)

所以理想的前景将是

代码语言:javascript
复制
sort_by  x         y       rank
a        500       1000    1
a        200       2000    2
a        200       2000    2
a        200       100.5   3
a        100.5     4000    4
b        3         600.5   1
b        2         600.5   2
b        1         500.5   3  
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-22 06:52:16

sort_values之后与factorize确认

代码语言:javascript
复制
df = df.sort_values(by=["x","y"], ascending=False)
df['rank']=tuple(zip(df.x,df.y))
df['rank']=df.groupby('sort_by',sort=False)['rank'].apply(lambda x : pd.Series(pd.factorize(x)[0])).values
df
Out[615]: 
  sort_by      x       y  rank
3       a  500.0  1000.0     1
1       a  200.0  2000.0     2
2       a  200.0  2000.0     2
7       a  200.0   100.5     3
0       a  100.5  4000.0     4
6       b    3.0   600.5     1
5       b    2.0   600.5     2
4       b    1.0   500.5     3
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54817317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档