我需要按分区对两列的值进行排序,就像在SQL分区中那样。 在此示例中,我解释了我的需要。
我有这个数据框:
df = pd.DataFrame({'A': [6,0, 4,2, 8, 2, 6,0, 4,8],
'B': range(0, 10),
'C': ['a', 'b','c', 'd', 'e','a', 'b','c', 'd', '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, 2, 4, 6, 8,0, 2, 4, 6, 8],
'B': range(0, 10),
'C': ['a', 'b','c', 'd', 'e','a', 'b','c', 'd', '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
答案 0 :(得分:0)
这是一个解决方案,使用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