对两列大熊猫进行排序,例如通过SQL查询进行分区

时间:2020-09-05 14:46:58

标签: python pandas dataframe partitioning

我需要按分区对两列的值进行排序,就像在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列中有一个分区,从ae,我需要根据{{ 1}}。我找不到解决它的好答案。这类似于A

中的Partition by

1 个答案:

答案 0 :(得分:0)

这是一个解决方案,使用GroupBy.cumcount创建一列sort_以标识分区,并使用DataFrame.sort_valuessort_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