问题描述
我需要按分区对两列的值进行排序,就像在sql分区中那样。 在此示例中,我解释了我的需要。
我有这个数据框:
df = pd.DataFrame({'A': [6,4,2,8,6,8],'B': range(0,10),'C': ['a','b','c','d','e','a','e']})
A B C
0 6 0 a
1 0 1 b
2 4 2 c
3 2 3 d
4 8 4 e
--------------- partition by C
5 2 5 a
6 6 6 b
7 0 7 c
8 4 8 d
9 8 9 e
这是我的最终数据帧:
import pandas as pd
import random as rand
df = pd.DataFrame({'A': [0,'e']})
A B C
0 0 0 a
1 2 1 b
2 4 2 c
3 6 3 d
4 8 4 e
--------------- partition by C
5 0 5 a
6 2 6 b
7 4 7 c
8 6 8 d
9 8 9 e
如您所见,我在数据框的C
列中有一个分区,从a
到e
,我需要根据{{ 1}}。我找不到解决它的好答案。这类似于A
解决方法
这是一个解决方案,使用GroupBy.cumcount
创建一列sort_
以标识分区,并使用DataFrame.sort_values
按sort_
和A
对数据帧进行排序。 / p>
print(
df.assign(sort_ = df.groupby('C').cumcount()).sort_values(by=['sort_','A'])
#.drop(columns=['sort_'])
)
A B C sort_
1 0 1 b 0
3 2 3 d 0
2 4 2 c 0
0 6 0 a 0
4 8 4 e 0
7 0 7 c 1
5 2 5 a 1
8 4 8 d 1
6 6 6 b 1
9 8 9 e 1