我正在努力将长期数据有效地分成每天8个时间间隔。每个间隔为3小时,但边缘重叠:
00.00 - 03.00
03.00 - 06.00
06.00 - 09.00
09.00 - 12.00
12.00 - 15.00
15.00 - 18.00
18.00 - 21.00
21.00 - 24.00
我试着跟随:
data = data.groupby(pd.TimeGrouper('4h', closed='left'))
for t, group in groups:
print(group)
结果是:
X Y
2010-01-01 00:00:00 -0.2 -2.4
2010-01-01 01:00:00 -0.1 -2.8
2010-01-01 02:00:00 0.8 -2.3
2010-01-01 03:00:00 1.2 -2.0
X Y
2010-01-01 04:00:00 1.2 0.0
2010-01-01 05:00:00 0.8 0.8
2010-01-01 06:00:00 0.3 1.8
2010-01-01 07:00:00 -0.5 2.8
X Y
2010-01-01 08:00:00 -4.6 3.7
2010-01-01 09:00:00 -7.6 1.3
2010-01-01 10:00:00 -8.0 -1.1
2010-01-01 11:00:00 -7.8 -2.4
X Y
2010-01-01 12:00:00 -5.4 -3.0
2010-01-01 13:00:00 -0.3 -0.9
2010-01-01 14:00:00 1.9 -0.3
2010-01-01 15:00:00 2.3 0.1
...
但我想要的是:
X Y
2010-01-01 00:00:00 -0.2 -2.4
2010-01-01 01:00:00 -0.1 -2.8
2010-01-01 02:00:00 0.8 -2.3
2010-01-01 03:00:00 1.2 -2.0
X Y
2010-01-01 03:00:00 1.2 -2.0
2010-01-01 04:00:00 1.2 0.0
2010-01-01 05:00:00 0.8 0.8
2010-01-01 06:00:00 0.3 1.8
X Y
2010-01-01 06:00:00 0.3 1.8
2010-01-01 07:00:00 -0.5 2.8
2010-01-01 08:00:00 -4.6 3.7
2010-01-01 09:00:00 -7.6 1.3
X Y
2010-01-01 09:00:00 -7.6 1.3
2010-01-01 10:00:00 -8.0 -1.1
2010-01-01 11:00:00 -7.8 -2.4
2010-01-01 12:00:00 -5.4 -3.0
...
(注意边缘的重复点)
这可以通过Pandas和/或Numpy有效地完成吗? (数据集长达100年)
答案 0 :(得分:0)
这有点像黑客攻击,但我认为可能必须考虑到你的设计会有重复的时间戳(并希望它们在不同的组中)。请注意,这当然只适用于规则间隔的行。
首先,只需使用高级/花式索引来复制每三行:
df2 = df.append(df.iloc[3::3]).sort().reset_index()
然后创建一个简单的石斑鱼:
df2['grp'] = df2.index.values / 4
检查:
for i, g in df2.groupby('grp'): print g
date time X Y grp
0 2010-01-01 00:00:00 -0.2 -2.4 0
1 2010-01-01 01:00:00 -0.1 -2.8 0
2 2010-01-01 02:00:00 0.8 -2.3 0
3 2010-01-01 03:00:00 1.2 -2.0 0
date time X Y grp
4 2010-01-01 03:00:00 1.2 -2.0 1
5 2010-01-01 04:00:00 1.2 0.0 1
6 2010-01-01 05:00:00 0.8 0.8 1
7 2010-01-01 06:00:00 0.3 1.8 1
date time X Y grp
8 2010-01-01 06:00:00 0.3 1.8 2
9 2010-01-01 07:00:00 -0.5 2.8 2
10 2010-01-01 08:00:00 -4.6 3.7 2
11 2010-01-01 09:00:00 -7.6 1.3 2