• 售前

  • 售后

热门帖子
入门百科

pandas组内排序,并在每个分组内按序打上序号的操作

[复制链接]
扮猪吃老虎2017 显示全部楼层 发表于 2021-10-26 14:10:16 |阅读模式 打印 上一主题 下一主题
问题:

pandas组内排序,并在每个分组内按序打上序号
形貌:

pandas dataframe 对dep_id组内的salary排序。盼望给下面本来只有前三列的dataframe,添加上第四列。
等价于sql里的排序函数 row_number() over() 功能

假设我已经建好了仅有前三列的dataframe,数据集定名为 MyData,
办理方案如下:
  1. MyData['sort_id'] = MyData['salary'].groupby(MyData['dep_id']).rank()
复制代码
结果如下:

增补:Pandas.DataFrame实现分组、排序并且为分组插入排名
1. 示例数据(各班级门生得分)
  1. import pandas as pd
  2. data_dict = {"name":
  3.        ["Rose", "Jack", "Tom", "Kyle", "Jery", "Adam", "Bill", "David", "Denny", "Evan"],
  4.       "class": [1, 2, 3, 1, 2, 3, 1, 2, 3, 1],
  5.       "score": [88, 92, 38, 98, 22, 65, 45, 53, 97, 100]}
  6. df = pd.DataFrame(data=data_dict)
  7. df
复制代码
2. 按班级分组
  1. df = df.groupby('class', sort=False)\
  2.     .apply(lambda x:x.sort_values("score", ascending=False))\
  3.     .reset_index(drop=True)
  4. df
复制代码
3. 给各分组班级增长排名列
  1. df["rank"] = None
  2. # 标识班级
  3. flag = df.loc[0].values[1]
  4. rank = 0
  5. for i in range(len(df)):
  6.   temp = df.loc[i].values[1]
  7.   if (temp == flag).all():
  8.     # 同一班级
  9.     rank += 1
  10.   else:
  11.     # 不同班级,重新计算排名
  12.     flag = temp
  13.     rank = 1
  14.   df.loc[i, "rank"] = rank
  15. df
复制代码
以上为个人经验,盼望能给大家一个参考,也盼望大家多多支持脚本之家。如有错误或未思量完全的地方,望不吝见教。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作