我有一个这样的数据框:
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
答案 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