Использование Pandas Groupby

У меня есть df криптографических данных, и я пытаюсь выяснить, есть ли определенное время дня/недели, когда цены меняются в ту или иную сторону. У меня есть отметка времени, день недели и возврат из предыдущих отметок времени, как в случае с данными примера ниже.

Date                  Day       Return
2019-06-22 01:00:00   Saturday -0.046910
2019-06-22 07:00:00   Saturday -0.018756
2019-06-22 13:00:00   Saturday  0.036842
2019-06-22 19:00:00   Saturday  0.000998
2019-06-23 01:00:00     Sunday  0.017672
2019-06-23 07:00:00     Sunday  0.021102
2019-06-23 13:00:00     Sunday -0.014737
2019-06-23 19:00:00     Sunday -0.039085
2019-06-24 01:00:00     Monday  0.009690
2019-06-24 07:00:00     Monday -0.004367
2019-06-24 13:00:00     Monday -0.005342
2019-06-24 19:00:00     Monday  0.001060
2019-06-25 01:00:00    Tuesday -0.027738
2019-06-25 07:00:00    Tuesday -0.001599
2019-06-25 13:00:00    Tuesday  0.006247
2019-06-25 19:00:00    Tuesday -0.036937
2019-06-26 01:00:00  Wednesday -0.064866
2019-06-26 07:00:00  Wednesday  0.012319

Моя первая проблема заключается в том, что отметка времени сбивает с толку. Поскольку я получаю данные с разных бирж, отметка времени на многих из них отличается, поэтому я отказался от идеи стандартизировать столбец Date и теперь хотел бы просто новый столбец, в котором нумеруется период в каждом дне. Таким образом, первые 6 часов в каждую субботу будут Saturday_1 и так далее. Таким образом, в итоге у меня будет 28 различных категорий (4 периода времени по 7 дней в неделю).

Тогда я бы хотел, чтобы groupby этот новый столбец вернул мне среднюю доходность для каждой категории, как это было.

Ваше здоровье

Немного неясно, о чем вы просите, название относится к pandas groupby, но в теле текста вы, похоже, больше боретесь с форматом даты. Если вам нужна помощь с форматом даты, вам нужно будет предоставить примеры для каждого формата. Если вам нужна помощь с группировкой по банке, вам просто нужно means_by_period = df.groupby('period').Return.mean(), которая вернет серию из 28 значений, проиндексированных по периоду.

Eden Trainor 26.06.2019 15:18

Извините за честный комментарий, я думаю, я больше думал о конечном продукте, в любом случае Куанг Хоанг дал отличный ответ для первой половины проблемы, а ваш был идеальным для второй половины, поэтому большое спасибо вам обоим.

top bantz 26.06.2019 16:32
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
28
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Предполагая, что ваш столбец Day правильный:

# ignore if already datetime
df.Date = pd.to_datetime(df.Date)

# hour block in the day
s = df.Date.dt.hour//6 + 1

# new column
df['group'] = df['Day'] + '_' + s.astype(str)

выход:

0      Saturday_1
1      Saturday_2
2      Saturday_3
3      Saturday_4
4        Sunday_1
5        Sunday_2
6        Sunday_3
7        Sunday_4
8        Monday_1
9        Monday_2
10       Monday_3
11       Monday_4
12      Tuesday_1
13      Tuesday_2
14      Tuesday_3
15      Tuesday_4
16    Wednesday_1
17    Wednesday_2
Name: group, dtype: object

Другие вопросы по теме

3 цифры усекаются из 18-значного столбца, когда я сохраняю свой фрейм данных pandas в виде файла csv
Фильтр данных по значениям словаря, но иногда включает значения, а иногда исключает их
Как объединить pandas df с несколькими столбцами, используя один ключ из другого столбца?
Как поместить диапазон столбцов в один столбец при чтении csv с пандами?
Используйте лист Excel для создания словаря для замены значений
Объединение данных определенных столбцов из нескольких CSV-файлов
Инициализировать несколько столбцов в фрейме данных, используя несколько операций
На основе результата столбца dataframe все следующие строки равны повторяющемуся значению, пока результат не изменится и не появится новое повторяющееся значение
Получение ValueError: конструктор DataFrame неправильно вызывается при создании кадра данных из списков списка
Concat два фрейма данных с общими столбцами