在两列上对Pandas Dataframe进行排序,其中一列值按顺序重复

时间:2016-07-03 17:22:13

标签: python pandas

我的输入数据框有两列:

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

请建议如何实施此类排序/排序。

1 个答案:

答案 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排序。最后,该辅助列被删除。