Я начинаю программист и изучаю python (+ pandas) и надеюсь, что смогу это объяснить достаточно хорошо. У меня большой временный ряд pd dataframe более 3 миллионов строк и изначально 12 столбцов, охватывающих несколько лет. Это охватывает людей, которые берут билет из разных мест, обозначенных номерами идентификаторов (350 из них). Каждая строка - один экземпляр (один билет выполнен). Я искал много вопросов, таких как counting records per hour per day и getting average per hour over several years. Тем не менее, я столкнулся с проблемой включения переменной «Id». Я ищу, чтобы получить среднее значение людей, принимающих билет за каждый час, за каждый день недели (пн-пт) и за каждую станцию.
У меня есть следующие, установив DateTime индексировать:Временные ряды: Среднее на час в день на идентификационный номер
Id Start_date Count Day_name_no
149 2011-12-31 21:30:00 1 5
150 2011-12-31 20:51:00 1 0
259 2011-12-31 20:48:00 1 1
3015 2011-12-31 19:38:00 1 4
28 2011-12-31 19:37:00 1 4
Использование groupby
и Start_date.index.hour
, я не могу показаться, чтобы включить 'Id'.
Моего альтернативный подход заключается в разделении часа из даты и имеет следующий:
Id Count Day_name_no Trip_hour
149 1 2 5
150 1 4 10
153 1 2 15
1867 1 4 11
2387 1 2 7
Я тогда получить количество первого с:
Count_Item = TestFreq.groupby([TestFreq['Id'], TestFreq['Day_name_no'], TestFreq['Hour']]).count().reset_index()
Id Day_name_no Trip_hour Count
1 0 7 24
1 0 8 48
1 0 9 31
1 0 10 28
1 0 11 26
1 0 12 25
Затем используйте GroupBy и означает:
Mean_Count = Count_Item.groupby(Count_Item['Id'], Count_Item['Day_name_no'], Count_Item['Hour']).mean().reset_index()
Однако это не дает желаемого результата, поскольку средние значения неверны. Надеюсь, я четко объяснил этот вопрос. Я ищу среднее значение в час в день на Id, поскольку я планирую сделать кластеризацию для разделения моего набора данных на группы, прежде чем применять прогностическую модель для этих групп.
Любая помощь была бы признательна и, если возможно, объяснение того, что я делаю неправильно, либо кодекс, либо мой подход.
Заранее спасибо.
Я отредактировал это, чтобы попытаться сделать его немного яснее. Написание вопроса с недостатком сна, вероятно, нецелесообразно. Игрушечный набор данных, который я начать с:
Date Id Dow Hour Count
12/12/2014 1234 0 9 1
12/12/2014 1234 0 9 1
12/12/2014 1234 0 9 1
12/12/2014 1234 0 9 1
12/12/2014 1234 0 9 1
19/12/2014 1234 0 9 1
19/12/2014 1234 0 9 1
19/12/2014 1234 0 9 1
26/12/2014 1234 0 10 1
27/12/2014 1234 1 11 1
27/12/2014 1234 1 11 1
27/12/2014 1234 1 11 1
27/12/2014 1234 1 11 1
04/01/2015 1234 1 11 1
теперь я понимаю, что я должен был бы использовать дату первого и получить что-то вроде:
Date Id Dow Hour Count
12/12/2014 1234 0 9 5
19/12/2014 1234 0 9 3
26/12/2014 1234 0 10 1
27/12/2014 1234 1 11 4
04/01/2015 1234 1 11 1
А затем вычислить среднее значение за Id, в Dow, в час. И хочу получить это:
Id Dow Hour Mean
1234 0 9 4
1234 0 10 1
1234 1 11 2.5
Надеюсь, это немного улучшится. Мой реальный набор данных охватывает 3 года с 3 миллионами строк, содержит 350 идентификационных номеров.
Благодаря @Def_Os. Я сделал редактирование, чтобы попытаться сделать вопрос немного яснее. Я делал что-то очень похожее на то, что вы разместили, но получал только «1». Я думаю, что он добавляет все 1 и делит на сумму, давая среднее значение 1.Я надеюсь, что редактирование может сделать это немного яснее, что я пытаюсь сделать. Благодарю. –
Я обновил свой ответ, чтобы реализовать ваш пример. –