Pandas Dataframe对列值进行排序和排序

时间:2017-08-17 13:15:03

标签: python pandas dataframe

我想知道是否有人知道如何以下列方式对pandas数据帧进行排序:

a)我有以下随机排序的数据,其ID多次出现,标签为0或1:

id | label
------ | ------ 
1 | 1
1 | 0
1 | 0
2 | 1
2 | 0
2 | 0
3 | 0
3 | 0
3 | 0

我想按升序对标签进行排序,然后按升序对id进行排序,但不进行分组,如下所示:

id | label
------ | ------ 
1 | 0
2 | 0
3 | 0
1 | 0
2 | 0
3 | 0
3 | 0
1 | 1
2 | 1

提前致谢!

1 个答案:

答案 0 :(得分:3)

首先按id和label排序,然后使用cumcount创建表示1,2,3组的索引,然后按索引和标签排序。

df_out = df.sort_values(by=['id','label'])\
  .set_index(df.groupby('id').cumcount())\
  .sort_index()\
  .sort_values(by='label')

输出:

   id  label
0   1      0
0   2      0
0   3      0
1   1      0
1   2      0
1   3      0
2   3      0
2   1      1
2   2      1