Вы можете группировать по времени, имени пользователя и aisle_id, а затем сортировать значения по seat_id в каждой группе на основе значений aisle_id.
Для сортировки внутри групп создайте функцию fun c ():
def func(x):
if (x["aisle_id"].iloc[0]%2 == 0):
ans = x["seat_id"].sort_values(ascending=False)
else:
ans = x["seat_id"].sort_values()
return ans
Затем сгруппируйте и примените fun c ():
ans =
df.groupby(["time","username","aisle_id"]).apply(func).reset_index(level=[0,1,2])
Так как 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
вывод
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