Python 一年的平均每小时工作日概况,不包括周末和节假日
使用Pandas,我从导入的.csv文件创建了一个数据帧(该文件是通过模拟生成的)。数据框架由一年半小时的能源消耗数据组成。我已经为这些日期创建了DateTimeindex 我希望能够将这些数据重新格式化为每周平均小时数和周末概况结果。周配置文件不包括节假日 数据帧:Python 一年的平均每小时工作日概况,不包括周末和节假日,python,pandas,time-series,Python,Pandas,Time Series,使用Pandas,我从导入的.csv文件创建了一个数据帧(该文件是通过模拟生成的)。数据框架由一年半小时的能源消耗数据组成。我已经为这些日期创建了DateTimeindex 我希望能够将这些数据重新格式化为每周平均小时数和周末概况结果。周配置文件不包括节假日 数据帧: Date_Time Equipment:Electricity:LGF Equipment:Electricity:GF 01/01/2000 00:30 0.583979872
Date_Time Equipment:Electricity:LGF Equipment:Electricity:GF
01/01/2000 00:30 0.583979872 0.490327348
01/01/2000 01:00 0.583979872 0.490327348
01/01/2000 01:30 0.583979872 0.490327348
01/01/2000 02:00 0.583979872 0.490327348
我找到了一个例子(),解释了几年来一直这样做,但没有明确说明一周(没有假期)和周末
我意识到在熊猫身上没有可以直接做到这一点的重采样技术,我使用了几个别名()来创建每月和每日的配置文件
我正在考虑使用工作日频率,创建一个新的工作日日期索引,并每半小时将其与我的DataFrame datetimeindex进行比较。然后返回工作日和周末的值(分别为true或false),以创建新的数据集,但不确定如何执行此操作
聚苯乙烯;我刚刚开始学习Python和Pandas。虚拟数据(供将来参考,如果您以可复制粘贴的形式发布一些数据,则更有可能得到答案)
这里有一个方法。首先定义美国(或根据需要修改)工作日与假日的抵销,并生成涵盖日期的日期和范围
from pandas.tseries.holiday import USFederalHolidayCalendar
from pandas.tseries.offsets import CustomBusinessDay
bday_us = CustomBusinessDay(calendar=USFederalHolidayCalendar())
bday_over_df = pd.date_range(start=df.index.min().date(),
end=df.index.max().date(), freq=bday_us)
然后,开发两个分组列。一个小时专栏很容易
df['hour'] = df.index.hour
对于工作日/周末/假日,定义一个函数以对数据进行分组
def group_day(date):
if date.weekday() in [5,6]:
return 'weekend'
elif date.date() in bday_over_df:
return 'weekday'
else:
return 'holiday'
df['day_group'] = df.index.map(group_day)
然后,按照您的意愿将两列分组
In [140]: df.groupby(['day_group', 'hour']).sum()
Out[140]:
a
day_group hour
holiday 0 1.890621
1 -0.029606
2 0.255001
3 2.837000
4 -1.787479
5 0.644113
6 0.407966
7 -1.798526
8 -0.620614
9 -0.567195
10 -0.822207
11 -2.675911
12 0.940091
13 -1.601885
14 1.575595
15 1.500558
16 -2.512962
17 -1.677603
18 0.072809
19 -1.406939
20 2.474293
21 -1.142061
22 -0.059231
23 -0.040455
weekday 0 9.192131
1 2.759302
2 8.379552
3 -1.189508
4 3.796635
5 3.471802
... ...
18 -5.217554
19 3.294072
20 -7.461023
21 8.793223
22 4.096128
23 -0.198943
weekend 0 -2.774550
1 0.461285
2 1.522363
3 4.312562
4 0.793290
5 2.078327
6 -4.523184
7 -0.051341
8 0.887956
9 2.112092
10 -2.727364
11 2.006966
12 7.401570
13 -1.958666
14 1.139436
15 -1.418326
16 -2.353082
17 -1.381131
18 -0.568536
19 -5.198472
20 -3.405137
21 -0.596813
22 1.747980
23 -6.341053
[72 rows x 1 columns]
谢谢!这很有效。因为我需要半小时数据,所以我添加了df['half_hour']=df.index.minute并通过df['combined']=df.apply(lambda x:'%02d:%02d'(x['hour',x['half_hour',])、axis=1将其组合到一个组合列表中,然后在groupby中使用组合列表。
In [140]: df.groupby(['day_group', 'hour']).sum()
Out[140]:
a
day_group hour
holiday 0 1.890621
1 -0.029606
2 0.255001
3 2.837000
4 -1.787479
5 0.644113
6 0.407966
7 -1.798526
8 -0.620614
9 -0.567195
10 -0.822207
11 -2.675911
12 0.940091
13 -1.601885
14 1.575595
15 1.500558
16 -2.512962
17 -1.677603
18 0.072809
19 -1.406939
20 2.474293
21 -1.142061
22 -0.059231
23 -0.040455
weekday 0 9.192131
1 2.759302
2 8.379552
3 -1.189508
4 3.796635
5 3.471802
... ...
18 -5.217554
19 3.294072
20 -7.461023
21 8.793223
22 4.096128
23 -0.198943
weekend 0 -2.774550
1 0.461285
2 1.522363
3 4.312562
4 0.793290
5 2.078327
6 -4.523184
7 -0.051341
8 0.887956
9 2.112092
10 -2.727364
11 2.006966
12 7.401570
13 -1.958666
14 1.139436
15 -1.418326
16 -2.353082
17 -1.381131
18 -0.568536
19 -5.198472
20 -3.405137
21 -0.596813
22 1.747980
23 -6.341053
[72 rows x 1 columns]