如何在Pandas Python中按ID对行进行排序

时间:2019-01-03 07:22:25

标签: python pandas dataframe pandas-groupby rank

我有一个这样的数据框:

id     points1    points2
1        44          53
1        76          34
1        63          66
2        23          34 
2        44          56

我想要这样的输出:

id     points1    points2     points1_rank     points2_rank
1        44          53            3                2
1        76          34            1                3
1        63          66            2                1
2        23          79            2                1
2        44          56            1                2

基本上,我想groupby('id'),并找到具有相同ID的每列的排名。

我尝试过:

features = ["points1","points2"]
df = pd.merge(df, df.groupby('id')[features].rank().reset_index(), suffixes=["", "_rank"], how='left', on=['id'])

但是我得到keyerror 'id'

2 个答案:

答案 0 :(得分:3)

join与删除public void LogCaller() { Console.WriteLine(new StackTrace().GetFrame(2).GetMethod().Name); } 一起使用,并为更改列名称添加add_suffix

reset_index

答案 1 :(得分:3)

您需要在ascending=False内使用rank

df.join(df.groupby('id')['points1', 'points2'].rank(ascending=False).astype(int).add_suffix('_rank'))


+---+----+---------+---------+--------------+--------------+
|   | id | points1 | points2 | points1_rank | points2_rank |
+---+----+---------+---------+--------------+--------------+
| 0 |  1 |      44 |      53 |            3 |            2 |
| 1 |  1 |      76 |      34 |            1 |            3 |
| 2 |  1 |      63 |      66 |            2 |            1 |
| 3 |  2 |      23 |      34 |            2 |            2 |
| 4 |  2 |      44 |      56 |            1 |            1 |
+---+----+---------+---------+--------------+--------------+