pandas组内排序,并在每个分组内按序打上序号?

pandas dataframe 对dep_id组内的salary排序。我希望给原本只有前三列的dataframe,添加上第四列。等价于sql的row…
关注者
19
被浏览
35,530

8 个回答

就在提出问题后的半个小时,网上的一位朋友给出了答案,在这里分享给大家。作为python的初学者,前辈的提点对于成长真的是很有帮助。

假设我已经建好了仅有前三列的dataframe,命名为My_Frame,那么解决方案如下:

My_Frame['sort_id'] = My_Frame['salary'].groupby(My_Frame['dep_id']).rank()

类似的问题在mysql中用rownumber解决。

1.groupby 分组

我们经常需要将数据根据某个字段划分为不同的组(group)进行分析,然后对组里的数据进行特定的操作。

groupby的过程就是将原有的DataFrame按字段,划分为若干个分组后的子DataFrame。在groupby之后的一系列操作(如agg、apply等),均是基于子DataFrame的操作。

1.1数组构造

# 数据构造
df = pd.DataFrame({"城市":["Russian","China","America","Brazil","China","Japan","America"],
                   "航班":[1170, 960, 980, 800, math.nan, 300, 3244],
                   "人口":[1, 13, math.nan, 2, 14, 3, 5]})
城市有重复的数据

1.2分组

# 对‘城市’列进行数据分组
group = df.groupby("城市")
list(group)
按城市分组后结果

从上图中可看出一共有5个子分组。

注:使用groupby后可以在子dataframe上应用 count,mean,unique等统计方法

1.3分组后统计

# 对‘城市’列进行数据分组后进行‘航班’列的数量统计
df.groupby("城市").航班.count()
分组后对‘航班’列的数量统计结果

2.rank 分组排名

对分完组的数据,如果还要做排名(非排序)操作,可以用到rank函数。

rank方法中可以通过method参数指定不同的排名方法,下面的示例中将详细说明。

1.1数据构造

# 数据构造