Python 在对表进行排序时,是否根据列的值选择升序/降序?

Python 在对表进行排序时,是否根据列的值选择升序/降序?,python,pandas,function,numpy,sorting,Python,Pandas,Function,Numpy,Sorting,我有一个带有以下列的df:时间、用户名、过道id、座位id 我想按以下方式对表进行排序: 第一:时间,上升 第二:用户名升序 第三:通道id上升 第四:座位号,当通道号为奇数时上升,当通道号为偶数时下降 我尝试将df分为df_奇数和df_偶数,使用df.sort_值根据第4条规则进行排序,然后使用concat,然后根据第1条、第2条和第3条规则进行排序。然而,这违反了第四条规则 有没有这样做的功能,或者我一开始是不是在尝试正确的方法?您可以按时间、用户名和过道id分组,然后根据过道id的值在每组

我有一个带有以下列的df:时间、用户名、过道id、座位id

我想按以下方式对表进行排序:

第一:时间,上升

第二:用户名升序

第三:通道id上升

第四:座位号,当通道号为奇数时上升,当通道号为偶数时下降

我尝试将df分为df_奇数和df_偶数,使用df.sort_值根据第4条规则进行排序,然后使用concat,然后根据第1条、第2条和第3条规则进行排序。然而,这违反了第四条规则


有没有这样做的功能,或者我一开始是不是在尝试正确的方法?

您可以按时间、用户名和过道id分组,然后根据过道id的值在每组中按座位id对值进行排序

要在组内排序,请创建函数func():

然后groupby和apply func()

由于groupby会自动按升序对组进行排序,因此无需按时间、用户名和通道进行排序

例如,对于以下数据帧

df = pd.DataFrame(columns = ["time","username","aisle_id","seat_id"])
df.loc[:,"time"] = [0, 0, 0, 0, 1, 1, 1, 1]
df.loc[:,"username"] = [0, 0, 1, 1, 2, 2, 3, 3]
df.loc[:,"aisle_id"] = [1, 1, 3, 3, 2, 2, 2, 2]
df.loc[:,"seat_id"] = [0, 1, 3, 1, 1, 2, 3, 4]
print(df)

   time username aisle_id  seat_id
0    0     0        1       0
1    0     0        1       1
2    0     1        3       3
3    0     1        3       1
4    1     2        2       1
5    1     2        2       2
6    1     3        2       3
7    1     3        2       4
输出为ans

    time username aisle_id  seat_id
0    0      0       1        0
1    0      0       1        1
3    0      1       3        1
2    0      1       3        3
5    1      2       2        2
4    1      2       2        1
7    1      3       2        4
6    1      3       2        3

您可以按时间、用户名和通道id进行分组,然后根据通道id的值在每组中按座位id对值进行排序

要在组内排序,请创建函数func():

然后groupby和apply func()

由于groupby会自动按升序对组进行排序,因此无需按时间、用户名和通道进行排序

例如,对于以下数据帧

df = pd.DataFrame(columns = ["time","username","aisle_id","seat_id"])
df.loc[:,"time"] = [0, 0, 0, 0, 1, 1, 1, 1]
df.loc[:,"username"] = [0, 0, 1, 1, 2, 2, 3, 3]
df.loc[:,"aisle_id"] = [1, 1, 3, 3, 2, 2, 2, 2]
df.loc[:,"seat_id"] = [0, 1, 3, 1, 1, 2, 3, 4]
print(df)

   time username aisle_id  seat_id
0    0     0        1       0
1    0     0        1       1
2    0     1        3       3
3    0     1        3       1
4    1     2        2       1
5    1     2        2       2
6    1     3        2       3
7    1     3        2       4
输出为ans

    time username aisle_id  seat_id
0    0      0       1        0
1    0      0       1        1
3    0      1       3        1
2    0      1       3        3
5    1      2       2        2
4    1      2       2        1
7    1      3       2        4
6    1      3       2        3

谢谢,这是一个聪明的答案!谢谢,这是一个聪明的答案!