У меня есть этот Pandas фрейм данных:
df = pd.DataFrame({'site': ['a', 'a', 'a', 'b', 'b', 'b', 'a', 'a', 'a'], 'day': [1, 1, 1, 1, 1, 1, 2, 2, 2],
'hour': [1, 2, 3, 1, 2, 3, 1, 2, 3], 'clicks': [100, 200, 50, 0, 0, 0, 10, 0, 20]})
# site day hour clicks
# 0 a 1 1 100
# 1 a 1 2 200
# 2 a 1 3 50
# 3 b 1 1 0
# 4 b 1 2 0
# 5 b 1 3 0
# 6 a 2 1 10
# 7 a 2 2 0
# 8 a 2 3 20
И я хочу удалить все строки для сайта / дня, где было 0 кликов. Итак, в приведенном выше примере я бы хотел удалить строки с site = 'b' и day = 1.
Я могу сгруппировать их и показать, где сумма равна 0 для дня / сайта:
print(df.groupby(['site', 'day'])['clicks'].sum() == 0)
Но как теперь можно легко удалить строки из исходного фрейма данных, где применяется это условие? Решение, которое у меня есть до сих пор, заключается в том, что я перебираю группу и сохраняю все кортежи сайта / дня в списке, а затем отдельно удаляю все строки, которые имеют эти комбинации сайт / день. Это работает, но я уверен, что должен быть более функциональный и элегантный способ добиться такого результата?