我有不规则时间间隔的传入数据。根据120秒对数据进行分组时,有用信息会被解码,但开始时间不固定。下面的示例df。
TIME SPEED
0 19-01-18 10:25:43 1425
1 19-01-18 10:25:45 1425
2 19-01-18 10:25:46 1425
3 22-12-18 23:25:56 1435
4 23-12-18 00:00:15 1433
5 29-10-18 00:37:15 1388
6 29-10-18 00:39:18 1388
7 29-10-18 00:39:40 1388
Q1)在这种情况下,Pandas可以根据用户的时间间隔(例如120秒)对时间戳进行分组吗?和Q2)相应地标记它们,如下所示:
TIME SPEED Group
0 19-01-18 10:25:43 1425 1
1 19-01-18 10:25:45 1425 1
2 19-01-18 10:25:46 1425 1
3 22-12-18 23:25:56 1435 2
4 23-12-18 00:00:15 1433 2
5 29-10-18 00:37:15 1388 3
6 29-10-18 00:39:18 1388 4
7 29-10-18 00:39:40 1388 4
因此,第一个周期/组从19-01-18 10:25:43开始。 120秒内的所有数据将被分组在一起。第二个周期将在下一个可用时间戳(22-12-18 23:25:56)和该时间戳之后的120秒处开始。该过程将继续。
任何提示,如果非常感谢。
答案 0 :(得分:1)
将pandas.Grouper
与ngroup
一起使用:
import pandas as pd
df['TIME'] = pd.to_datetime(df['TIME'], dayfirst=True)
s = df.groupby(pd.Grouper(key='TIME', freq='120s')).ngroup()
df['Group'] = s.groupby(s).ngroup().add(1)
print(df)
输出:
TIME SPEED Group
0 2018-01-19 10:25:43 1425 1
1 2018-01-19 10:25:45 1425 1
2 2018-01-19 10:25:46 1425 1
3 2018-12-22 20:25:56 1435 4
4 2018-12-23 00:00:15 1433 5
5 2018-10-29 00:37:15 1388 2
6 2018-10-29 00:39:18 1388 3
7 2018-10-29 00:39:40 1388 3
答案 1 :(得分:0)
将Series.dt.floor
与factorize
或Series.rank
结合使用:
df['TIME'] = pd.to_datetime(df['TIME'], dayfirst=True)
df['G'] = pd.factorize(df['TIME'].dt.floor('120S'))[0] + 1
print (df)
TIME SPEED G
0 2018-01-19 10:25:43 1425 1
1 2018-01-19 10:25:45 1425 1
2 2018-01-19 10:25:46 1425 1
3 2018-12-22 20:25:56 1435 2
4 2018-12-23 00:00:15 1433 3
5 2018-10-29 00:37:15 1388 4
6 2018-10-29 00:39:18 1388 5
7 2018-10-29 00:39:40 1388 5
df['TIME'] = pd.to_datetime(df['TIME'], dayfirst=True)
df['G'] = df['TIME'].dt.floor('120S').rank(method='dense').astype(int)
print (df)
TIME SPEED G
0 2018-01-19 10:25:43 1425 1
1 2018-01-19 10:25:45 1425 1
2 2018-01-19 10:25:46 1425 1
3 2018-12-22 20:25:56 1435 4
4 2018-12-23 00:00:15 1433 5
5 2018-10-29 00:37:15 1388 2
6 2018-10-29 00:39:18 1388 3
7 2018-10-29 00:39:40 1388 3