У меня есть 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 этот новый столбец вернул мне среднюю доходность для каждой категории, как это было.
Ваше здоровье
Извините за честный комментарий, я думаю, я больше думал о конечном продукте, в любом случае Куанг Хоанг дал отличный ответ для первой половины проблемы, а ваш был идеальным для второй половины, поэтому большое спасибо вам обоим.






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