sessions_df['bounced?'] = sessions_df['PageViews']==1
daily_session_bounce_rate = sessions_df.groupby('Date/Timestamp').mean()['bounced?']
Первая строка создает столбец в зависимости от того, равен ли PageViews
1. Это противоположно тому, как вы это сделали;у вас было bounced?
be True
, когда PageViews
больше 1 ... что, если я правильно понимаю ваше использование "отказов", является случаем, когда пользователь не отказов.
Вторая строка группируется по Date/Timestamp
, а затем принимает среднее значение.Всякий раз, когда вы делаете математику с такими логическими значениями, как Python, они приводят их как int, поэтому каждый раз, когда кто-то отскакивает, это True / 1, а когда нет, это False / 0.Таким образом, сумма значений логических значений как int совпадает со значением True.Когда вы говорите пандам взять среднее значение для серии логических значений, оно берет сумму / количество истинных и делит их на общее количество значений, что совпадает с вычислением процента случаев, когда у вас есть истинное значение.
Таким образом, группировка по дате и взятие среднего значения дает вам фрейм данных, где строки - это даты, а столбцы - это средства для этой даты.Результирующий кадр данных имеет столбец для каждого столбца исходного кадра данных (в этом случае у вас есть столбец, состоящий из среднего значения PageViews
для каждой даты и столбца среднего значения bounced?
для каждой даты).Если вам нужен только процент отказов, вы можете задать для фрейма данных значение ['bounced?']