我有一个由5列组成的pandas数据框.第二列的数字1至500重复5次.作为一个较短的例子,第二列是这样的(1,4,2,4,3,1,1,2,4,3,2,1,4,3,2,3)
,我想将它排序为这样(1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4)
.我用来排序的df=res.sort([2],ascending=True)
代码是这个代码对它进行排序 (1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4)
.
任何帮助都感激不尽.谢谢
怎么样:通过cumcount 排序然后是值本身:
In [11]: df = pd.DataFrame({"s": [1,4,2,4,3,1,1,2,4,3,2,1,4,3,2,3]}) In [12]: df.groupby("s").cumcount() Out[12]: 0 0 1 0 2 0 3 1 4 0 5 1 6 2 7 1 8 2 9 1 10 2 11 3 12 3 13 2 14 3 15 3 dtype: int64 In [13]: df["s_cumcounts"] = df.groupby("s").cumcount() In [14]: df.sort_values(["s_cumcounts", "s"]) Out[14]: s s_cumcounts 0 1 0 2 2 0 4 3 0 1 4 0 5 1 1 7 2 1 9 3 1 3 4 1 6 1 2 10 2 2 13 3 2 8 4 2 11 1 3 14 2 3 15 3 3 12 4 3 In [15]: df = df.sort_values(["s_cumcounts", "s"]) In [16]: del df["s_cumcounts"]