按最小索引号对Pandas数据集组进行排序,然后根据第3列重新排序组内的所有其他列

时间:2017-10-11 16:22:39

标签: python pandas sorting

我有一个这样的数据框:

import numpy as np
import pandas as pd

columns=['Order', 'Group_code', 'Grade', 'Contextual_info']

data = np.array([np.arange(6)]*4).T
mydf = pd.DataFrame(data, columns=columns)

mydf.Order = [1,2,3,4,5,6]
mydf.Group_code = ['group99','group2','group2','group2','group12','group12']
mydf.Grade = [80,0,60,80,85,70]
mydf.Contextual_info = [5,4,3,2,1,0]

mydf
   Order Group_code  Grade Contextual_info
0      1    group99     80               5
1      2     group2      0               4  
2      3     group2     60               3          
3      4     group2     80               2
4      5    group12     85               1
5      6    group12     70               0

Order订购。我希望Group_code保留Order的排序,因此Group_code中的列值不应更改。

但是,在每个Group_code组中的,我想按Grade降序排序。最后,我将用一个新的整数向量1 ... n替换Order,这样在这个例子中它仍然是1,2,3,4,5,6。

期望的结果:

   Order Group_code  Grade  Contextual_info
      1    group99     80                 5
      2     group2     80                 2 
      3     group2     60                 3
      4     group2      0                 4
      5    group12     85                 1
      6    group12     70                 0

1 个答案:

答案 0 :(得分:2)

使用

In [677]: mydf.Grade = (mydf.groupby('Group_code')['Grade']
                            .transform(pd.Series.sort_values, ascending=False))

In [678]: mydf
Out[678]:
  Order Group_code  Grade
0      1    group99     80
1      2     group2     80
2      3     group2     60
3      4     group2      0
4      5    group12     85
5      6    group12     70