首页 > 解决方案 > 使用 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 个时间段 x 一周 7 天)。

然后我想要的是groupby这个新专栏,并且已经返回给我每个类别的平均回报。

干杯

标签: pythonpandasgroup-bypandas-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

推荐阅读