如何按小时聚合数据?
How do I aggregate data by hour?
所以我目前正在处理一个数据集,这样我就可以训练一个模型来预测入住率。我想按小时分解数据集,因此每 60 分钟聚合一次数据以获得每小时或半小时的平均值,以便在绘图时更容易阅读。我该怎么做?
Date Temperature Humidity Light CO2
1 2015-02-04 17:51:00 1.000000 0.470533 0.275490 0.190933
2 2015-02-04 17:51:59 0.992823 0.470332 0.277754 0.186446
3 2015-02-04 17:53:00 0.992823 0.469326 0.275490 0.186136
4 2015-02-04 17:54:00 0.992823 0.467315 0.275490 0.182887
5 2015-02-04 17:55:00 0.980861 0.467315 0.275490 0.180566
6 2015-02-04 17:55:59 0.980861 0.467315 0.270964 0.178400
7 2015-02-04 17:57:00 0.980861 0.467315 0.270964 0.178813
8 2015-02-04 17:57:59 0.980861 0.467315 0.270964 0.177162
9 2015-02-04 17:58:59 0.980861 0.467315 0.270964 0.171180
10 2015-02-04 18:00:00 0.974880 0.466197 0.270964 0.170354
11 2015-02-04 18:01:00 0.974880 0.465080 0.270964 0.171747
12 2015-02-04 18:02:00 0.980861 0.462845 0.270964 0.172211
13 2015-02-04 18:03:00 0.980861 0.465825 0.270964 0.167569
14 2015-02-04 18:04:00 0.968900 0.465080 0.270964 0.170045
15 2015-02-04 18:04:59 0.956938 0.463962 0.270964 0.169117
16 2015-02-04 18:06:00 0.956938 0.463962 0.270640 0.165713
17 2015-02-04 18:07:00 0.956938 0.467315 0.000000 0.166331
18 2015-02-04 18:08:00 0.943780 0.471338 0.000000 0.168498
19 2015-02-04 18:08:59 0.943780 0.475807 0.000000 0.168498
20 2015-02-04 18:10:00 0.930622 0.475807 0.000000 0.170973
我确定之前可能已经回答过这个问题,但我找不到任何东西...我正在寻找绘制此数据的图表。
本质上,您将使用 pd.to_datetime
将 Date
列转换为日期时间对象,然后在使用 [=17] 将 Date
列设置为索引后简单地 df.groupby
=]
df.groupby([df.index.hour]).mean()
这是一个完整的例子:
import pandas as pd
from io import StringIO
data = """Date Temperature Humidity Light CO2
2015-02-04 17:51:00 1.000000 0.470533 0.275490 0.190933
2015-02-04 17:51:59 0.992823 0.470332 0.277754 0.186446
2015-02-04 17:53:00 0.992823 0.469326 0.275490 0.186136
2015-02-04 17:54:00 0.992823 0.467315 0.275490 0.182887
2015-02-04 17:55:00 0.980861 0.467315 0.275490 0.180566
2015-02-04 17:55:59 0.980861 0.467315 0.270964 0.178400
2015-02-04 17:57:00 0.980861 0.467315 0.270964 0.178813
2015-02-04 17:57:59 0.980861 0.467315 0.270964 0.177162
2015-02-04 17:58:59 0.980861 0.467315 0.270964 0.171180
2015-02-04 18:00:00 0.974880 0.466197 0.270964 0.170354
2015-02-04 18:01:00 0.974880 0.465080 0.270964 0.171747
2015-02-04 18:02:00 0.980861 0.462845 0.270964 0.172211
2015-02-04 18:03:00 0.980861 0.465825 0.270964 0.167569
2015-02-04 18:04:00 0.968900 0.465080 0.270964 0.170045
2015-02-04 18:04:59 0.956938 0.463962 0.270964 0.169117
2015-02-04 18:06:00 0.956938 0.463962 0.270640 0.165713
2015-02-04 18:07:00 0.956938 0.467315 0.000000 0.166331
2015-02-04 18:08:00 0.943780 0.471338 0.000000 0.168498
2015-02-04 18:08:59 0.943780 0.475807 0.000000 0.168498
2015-02-04 18:10:00 0.930622 0.475807 0.000000 0.170973
"""
df = pd.read_csv(StringIO(data), sep="\s\s+")
df = df.set_index("Date")
df.index = pd.to_datetime(df.index)
print(df.groupby([df.index.hour]).mean())
Temperature Humidity Light CO2
Date
17 0.986975 0.468231 0.273730 0.181391
18 0.960853 0.467565 0.172402 0.169187
你需要的工具是松下重采样方法。
要使用它,Date 列必须是 datetime 类型,所以如果保留它
作为文本,从:
开始
df.Date = pd.to_datetime(df.Date)
要计算重采样的 DataFrame,运行:
result = df.resample('30T', on="Date").mean()
在上面的示例中,30T 是重采样频率 - 30 分钟。
如果您改变主意,请设置另一个值。
源数据样本的结果是:
Temperature Humidity Light CO2
Date
2015-02-04 17:30:00 0.986975 0.468231 0.273730 0.181391
2015-02-04 18:00:00 0.960853 0.467565 0.172402 0.169187
所以我目前正在处理一个数据集,这样我就可以训练一个模型来预测入住率。我想按小时分解数据集,因此每 60 分钟聚合一次数据以获得每小时或半小时的平均值,以便在绘图时更容易阅读。我该怎么做?
Date Temperature Humidity Light CO2
1 2015-02-04 17:51:00 1.000000 0.470533 0.275490 0.190933
2 2015-02-04 17:51:59 0.992823 0.470332 0.277754 0.186446
3 2015-02-04 17:53:00 0.992823 0.469326 0.275490 0.186136
4 2015-02-04 17:54:00 0.992823 0.467315 0.275490 0.182887
5 2015-02-04 17:55:00 0.980861 0.467315 0.275490 0.180566
6 2015-02-04 17:55:59 0.980861 0.467315 0.270964 0.178400
7 2015-02-04 17:57:00 0.980861 0.467315 0.270964 0.178813
8 2015-02-04 17:57:59 0.980861 0.467315 0.270964 0.177162
9 2015-02-04 17:58:59 0.980861 0.467315 0.270964 0.171180
10 2015-02-04 18:00:00 0.974880 0.466197 0.270964 0.170354
11 2015-02-04 18:01:00 0.974880 0.465080 0.270964 0.171747
12 2015-02-04 18:02:00 0.980861 0.462845 0.270964 0.172211
13 2015-02-04 18:03:00 0.980861 0.465825 0.270964 0.167569
14 2015-02-04 18:04:00 0.968900 0.465080 0.270964 0.170045
15 2015-02-04 18:04:59 0.956938 0.463962 0.270964 0.169117
16 2015-02-04 18:06:00 0.956938 0.463962 0.270640 0.165713
17 2015-02-04 18:07:00 0.956938 0.467315 0.000000 0.166331
18 2015-02-04 18:08:00 0.943780 0.471338 0.000000 0.168498
19 2015-02-04 18:08:59 0.943780 0.475807 0.000000 0.168498
20 2015-02-04 18:10:00 0.930622 0.475807 0.000000 0.170973
我确定之前可能已经回答过这个问题,但我找不到任何东西...我正在寻找绘制此数据的图表。
本质上,您将使用 pd.to_datetime
将 Date
列转换为日期时间对象,然后在使用 [=17] 将 Date
列设置为索引后简单地 df.groupby
=]
df.groupby([df.index.hour]).mean()
这是一个完整的例子:
import pandas as pd
from io import StringIO
data = """Date Temperature Humidity Light CO2
2015-02-04 17:51:00 1.000000 0.470533 0.275490 0.190933
2015-02-04 17:51:59 0.992823 0.470332 0.277754 0.186446
2015-02-04 17:53:00 0.992823 0.469326 0.275490 0.186136
2015-02-04 17:54:00 0.992823 0.467315 0.275490 0.182887
2015-02-04 17:55:00 0.980861 0.467315 0.275490 0.180566
2015-02-04 17:55:59 0.980861 0.467315 0.270964 0.178400
2015-02-04 17:57:00 0.980861 0.467315 0.270964 0.178813
2015-02-04 17:57:59 0.980861 0.467315 0.270964 0.177162
2015-02-04 17:58:59 0.980861 0.467315 0.270964 0.171180
2015-02-04 18:00:00 0.974880 0.466197 0.270964 0.170354
2015-02-04 18:01:00 0.974880 0.465080 0.270964 0.171747
2015-02-04 18:02:00 0.980861 0.462845 0.270964 0.172211
2015-02-04 18:03:00 0.980861 0.465825 0.270964 0.167569
2015-02-04 18:04:00 0.968900 0.465080 0.270964 0.170045
2015-02-04 18:04:59 0.956938 0.463962 0.270964 0.169117
2015-02-04 18:06:00 0.956938 0.463962 0.270640 0.165713
2015-02-04 18:07:00 0.956938 0.467315 0.000000 0.166331
2015-02-04 18:08:00 0.943780 0.471338 0.000000 0.168498
2015-02-04 18:08:59 0.943780 0.475807 0.000000 0.168498
2015-02-04 18:10:00 0.930622 0.475807 0.000000 0.170973
"""
df = pd.read_csv(StringIO(data), sep="\s\s+")
df = df.set_index("Date")
df.index = pd.to_datetime(df.index)
print(df.groupby([df.index.hour]).mean())
Temperature Humidity Light CO2
Date
17 0.986975 0.468231 0.273730 0.181391
18 0.960853 0.467565 0.172402 0.169187
你需要的工具是松下重采样方法。
要使用它,Date 列必须是 datetime 类型,所以如果保留它 作为文本,从:
开始df.Date = pd.to_datetime(df.Date)
要计算重采样的 DataFrame,运行:
result = df.resample('30T', on="Date").mean()
在上面的示例中,30T 是重采样频率 - 30 分钟。 如果您改变主意,请设置另一个值。
源数据样本的结果是:
Temperature Humidity Light CO2
Date
2015-02-04 17:30:00 0.986975 0.468231 0.273730 0.181391
2015-02-04 18:00:00 0.960853 0.467565 0.172402 0.169187