我有下面的dataframe…
date_time day value1 value2
0 2023-03-15 00:00:00 3 1 1
1 2023-03-15 06:00:00 3 2 2
2 2023-03-15 12:00:00 3 3 3
3 2023-03-15 18:00:00 3 4 4
4 2023-03-16 00:00:00 4 5 5
5 2023-03-16 06:00:00 4 6 6
6 2023-03-16 12:00:00 4 7 7
7 2023-03-16 18:00:00 4 8 8
8 2023-03-17 00:00:00 5 9 9
9 2023-03-17 06:00:00 5 10 10
10 2023-03-17 12:00:00 5 11 11
11 2023-03-17 18:00:00 5 12 12
12 2023-03-20 06:00:00 1 13 13
我正在尝试按天对数据进行分组,偏移7小时。使用以下...
rows = df.resample('24H', on='date_time', origin='epoch', offset='7H').agg({
'date_time': 'last', 'day': 'last', 'value1': 'first', 'value2': 'last'})
这给了我...
date_time day value1 value2
date_time
2023-03-14 07:00:00 2023-03-15 06:00:00 3.0 1.0 2.0
2023-03-15 07:00:00 2023-03-16 06:00:00 4.0 3.0 6.0
2023-03-16 07:00:00 2023-03-17 06:00:00 5.0 7.0 10.0
2023-03-17 07:00:00 2023-03-17 18:00:00 5.0 11.0 12.0
2023-03-19 07:00:00 2023-03-20 06:00:00 1.0 13.0 13.0
这几乎是正确的,但我还希望将任何间隔超过24小时的数据分组到一行中,就像这样......
date_time day value1 value2
date_time
2023-03-14 07:00:00 2023-03-15 06:00:00 3.0 1.0 2.0
2023-03-15 07:00:00 2023-03-16 06:00:00 4.0 3.0 6.0
2023-03-16 07:00:00 2023-03-17 06:00:00 5.0 7.0 10.0
2023-03-19 07:00:00 2023-03-20 06:00:00 1.0 11.0 13.0
在我重新采样数据后,我尝试对重新采样的数据进行分组,使用…
rows = rows.groupby(((rows.date_time - rows.date_time.shift(-1)) < '-24H').cumsum()
).agg({'date_time': 'last', 'day': 'last', 'value1': 'first', 'value2': 'last'})
但这导致了
date_time day value1 value2
date_time
0 2023-03-17 06:00:00 5.0 1.0 10.0
1 2023-03-20 06:00:00 1.0 11.0 13.0
因此,简而言之,我希望重采样的前3行和分组的最后一行实现我的目标。
我很接近了,但还不太明白。
有没有办法做到我所追求的?
1条答案
按热度按时间ahy6op9u1#
这本质上是一个缺口和孤岛问题:当差值为1天或更少时,创建一个新岛屿。