答案 0 :(得分:2)
您需要创建一个新列,该列基本上是A
中每个值的子索引。然后你可以对子索引进行排序。
df = pd.DataFrame([[1,40],[1,39],[1,73],
[2,58],[2,65],[2,22],
[3,9],[3,0],[3,21]], columns=list('AB'))
for a in df.A.unique():
df.loc[df.index[df.A==a],'x'] = list(range(sum(df.A==a)))
df
# returns:
A B x
0 1 40 0
1 1 39 1
2 1 73 2
3 2 58 0
4 2 65 1
5 2 22 2
6 3 9 0
7 3 0 1
8 3 21 2
df.sort_values(by=['x','A'])[['A','B']]
# returns:
A B
0 1 40
3 2 58
6 3 9
1 1 39
4 2 65
7 3 0
2 1 73
5 2 22
8 3 21
答案 1 :(得分:1)
groupby
列'A'
并使用cumcount
分别为每个分组编制索引argsort
并将其传递给iloc
以相应地重新排序<强> 溶液 强>
df.iloc[df.groupby('A').cumcount().argsort()]
A B
0 1 40
3 2 58
6 3 9
1 1 39
4 2 65
7 3 0
2 1 73
5 2 22
8 3 21