我的输入数据框有两列:
df
c1 c2
0 a 8
1 a 3
2 b 2
3 c 1
4 b 10
5 c 8
6 a 10
7 c 7
我想对上面的数据框进行排序,以便列#c1'中的值按顺序出现(abcabcac)及其相应的列' c2'值按升序(或降序)排列如下:
df_out:
c1 c2
0 a 3
1 b 2
2 c 1
3 a 8
4 b 10
5 c 7
6 a 10
7 c 8
请建议如何实施此类排序/排序。
答案 0 :(得分:3)
df.assign(c3 = df.groupby('c1')['c2'].rank()).sort_values(['c3', 'c1']).drop('c3', axis=1)
Out[21]:
c1 c2
1 a 3
2 b 2
3 c 1
0 a 8
4 b 10
7 c 7
6 a 10
5 c 8
这将创建一个新列c3
,其具有要在排序中使用的每个字母(相对于c2)的等级。然后,它按该列和c1
排序。最后,该辅助列被删除。