У вас есть ошибка в ваших данных, ожидаемый результат, у вас есть 700
, откуда он?
Проблема, которую вы пытались решить, - это не проблема одношаговой сортировки. Условия, которые вы дали, на каком-то уровне противоречат:
1st condition indicator_1=="Y", you want to ascending sort Num_people,
2nd condition indicator_1=="N", you want to descending sort indicator_2
Это мой подход. Вам нужно сделать два шага: 1. Сначала отсортируйте Indicator_1 2. Выберите Indicator1 == Y для одной сортировки; затем Indicator1 == N для другого рода.
import pandas as pd
Product_ = ["A", "B", "C", "D", "E", "F", "G", "H"]
indicator_1 = ["Y", "Y", "N", "N", "N", "N", "N", "N"]
indicator_2 = ["Y", "N", "Y", "Y", "Y", "N", "N", "N"]
indicator_3 = ["Y", "N", "N", "N", "Y", "Y", "N", "N"]
Num_people = [500, 600, 1000, 5000, 200, 500, 600, 500]
df = pd.DataFrame({"Product_": Product_, "indicator_1": indicator_1, "indicator_2": indicator_2, "indicator_3": indicator_3, "Num_people": Num_people})
# print(df)
# Product indicator_1 indicator_2 indicator_3 #_people
# A Y Y Y 500
# B Y N N 600
# C N Y N 1000
# D N Y N 5000
# E N Y Y 200
# F N N Y 500
# G N N N 600
# H N N N 500
temp = df.sort_values(["indicator_1", "Num_people"], ascending = [False, False])
temp_1 = temp[temp.indicator_1=="Y"]
temp = pd.concat([temp_1, temp[temp.indicator_1=="N"].sort_values(["indicator_2", "indicator_3", "Num_people"], ascending = [False, True, False])])
print(temp)
Вывод:
Product_ indicator_1 indicator_2 indicator_3 Num_people
1 B Y N N 600
0 A Y Y Y 500
3 D N Y N 5000
2 C N Y N 1000
4 E N Y Y 200
6 G N N N 600
7 H N N N 500
5 F N N Y 500
Надеюсь, это поможет.