Сложный фильтр по таблице
Существует вот такой DF:
In [116]: df
Out[116]:
route Mo Tu We Th Fr Sa Su
0 108 1 1 1 1 1 0 0
1 108 0 0 0 0 0 0 1
2 108 0 0 0 0 0 1 0
3 121 1 1 1 1 1 0 0
4 110 1 1 1 1 1 0 0
5 110 0 0 0 0 0 1 0
Необходимо найти только те route, которые не работают по выходным - sa = 0 и su = 0. Проблема в том, что маршруты дублируются с разными вариантами расписания и получается, что если задавать условие суб=0, вс=0, то результат уберет дубликаты в которых суб=1 и вс=1.
Например маршрут 110 содержит два поля, по которому ясно, что он ходит каждый день и он не нужен. Проблему усложняет то, что попадаются маршруты с 3 вариантами, которые также не нужны.
Должно получиться вот это:
In [116]: df
Out[116]:
route Mo Tu We Th Fr Sa Su
3 121 1 1 1 1 1 0 0
Ответы (1 шт):
Если я правильно понял вопрос - вам достаточно просуммировать значения в каждой группе, получив одну строку для каждого route_id и оставить только те строки для которых сумма значений за субботу и воскресенье равна нулю. Причем рабочие дни недели можно вовсе не рассматривать в решении.
Пример данных:
In [116]: df
Out[116]:
route_id Mo Tu We Th Fr Sa Su
0 108 1 1 1 1 1 0 0
1 108 0 0 0 0 0 0 1
2 108 0 0 0 0 0 1 0
3 121 1 1 1 1 1 0 0
4 110 1 1 1 1 1 0 0
5 110 0 0 0 0 0 1 0
решение:
res = df.groupby("route_id").filter(lambda x: x[["Sa", "Su"]].sum().sum() == 0)
результат:
In [118]: res
Out[118]:
route_id Mo Tu We Th Fr Sa Su
3 121 1 1 1 1 1 0 0
PS прошу обратить внимание и учесть на будущее, что для того чтобы привести воспроизводимый пример данных часто достаточно небольшого "синтетического" примера.