Python:如何在特定的时间窗口中对数据帧进行分组?
你好,我有一个数据框Python:如何在特定的时间窗口中对数据帧进行分组?,python,datetime,pandas,dataframe,Python,Datetime,Pandas,Dataframe,你好,我有一个数据框df,包含从起点X到目的地Y的不同行程的数据,起始时间T。我想计算某个时间窗口内X和Y之间的行程,比如说15分钟。所以 df: X Y T 1 2 2015-12-30 22:30:00.0 1 2 2015-12-30 22:35:00.0 1 2 2015-12-30 22:40:00.0 1 2 2015-12-30 23:40:00.0 3 5 2015-11-30 13:40:00.0 3 5 2015-11-30 13:44:00.0 3 5
df
,包含从起点X
到目的地Y
的不同行程的数据,起始时间T
。我想计算某个时间窗口内X
和Y
之间的行程,比如说15分钟
。所以
df:
X Y T
1 2 2015-12-30 22:30:00.0
1 2 2015-12-30 22:35:00.0
1 2 2015-12-30 22:40:00.0
1 2 2015-12-30 23:40:00.0
3 5 2015-11-30 13:40:00.0
3 5 2015-11-30 13:44:00.0
3 5 2015-11-30 19:54:00.0
我想要
dfO:
X Y count
1 2 3
3 5 2
为了计算从X
到Y
的所有行程,我做了:
tmp = df.groupby(["X", "Y"]).size()
我怎样才能同时考虑到这样一个事实,即我只想计算某个时间间隔内相同的出行次数
dt
?也许您正在寻找。它允许您按时间间隔对数据帧中的行进行分组,前提是该数据帧具有DatetimeIndex。(请注意,其中显示了如何在不使用DatetimeIndex的情况下按时间间隔分组。)
屈服
T X Y
2015-11-30 13:30:00 3 5 2
2015-11-30 19:45:00 3 5 1
2015-12-30 22:30:00 1 2 3
2015-12-30 23:30:00 1 2 1
这包含您想要的信息
T X Y
2015-11-30 13:30:00 3 5 2
2015-12-30 22:30:00 1 2 3
还有更多。不清楚您希望排除其他行的依据是什么。如果你
解释标准,我们应该能够准确地生成所需的数据帧。如果我理解正确:
In [34]: df.groupby([pd.Grouper(key='T', freq='15min'),'X','Y'], as_index=False).size()
Out[34]:
T X Y
2015-11-30 13:30:00 3 5 2
2015-11-30 19:45:00 3 5 1
2015-12-30 22:30:00 1 2 3
2015-12-30 23:30:00 1 2 1
在groupby之后的T列上使用pd.diff。这样你下次旅行就会有所不同。然后在dt部分上选择,在grouppymake之后不具有T列,使用参数
dt
。在那里,执行diff(在T上,应该在那里)并仅选择diff_T==dt部分,返回所选的数据帧。然后执行类似于df.groupby([“X”,“Y”])的操作。apply(func)
@emax,不太清楚如何连接所需的输出,如何计算特定时间窗口内X和Y之间的行程,比如说15分钟
?你能发布所需的输出吗?在分组之前先过滤所有数据怎么样?@MaxU:我比我更喜欢你的答案。您是否可以取消删除您的,以便我可以删除我的?当然可以,但请不要删除您的;)我发誓我在写我的时没有看到你的:)这正是我想要的,但它给了我这个错误TypeError:axis必须是一个DatetimeIndex,但是得到了一个'Index'
@emax:听起来你的t
列包含了日期字符串。它们需要转换为类似日期时间的值:df['T']=pd.to_datetime(df['T'])
或者pd.TimeGrouper
不会将这些值识别为日期时间(或时间戳)。
In [34]: df.groupby([pd.Grouper(key='T', freq='15min'),'X','Y'], as_index=False).size()
Out[34]:
T X Y
2015-11-30 13:30:00 3 5 2
2015-11-30 19:45:00 3 5 1
2015-12-30 22:30:00 1 2 3
2015-12-30 23:30:00 1 2 1