Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何在特定的时间窗口中对数据帧进行分组?_Python_Datetime_Pandas_Dataframe - Fatal编程技术网

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