Python:如何在特定时间窗口内对pandas数据框进行分组?

ema*_*max 4 python datetime dataframe pandas

您好,我有一个数据框,其中包含从出发地到目的地df的不同行程的数据以及开始时间。我想计算特定时间窗口之间和特定时间窗口内的行程,比如说。所以,XYTXY15 min

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
Run Code Online (Sandbox Code Playgroud)

我想

dfO:
X Y count
1 2   3
3 5   2
Run Code Online (Sandbox Code Playgroud)

为了计算从X到 的所有行程Y,我做了:

tmp = df.groupby(["X", "Y"]).size()
Run Code Online (Sandbox Code Playgroud)

我如何考虑到我只想计算特定时间间隔内的相同行程这一事实dt

unu*_*tbu 5

也许您正在寻找pd.TimeGrouper。它允许您按时间间隔对 DataFrame 中的行进行分组,前提是 DataFrame 具有 DatetimeIndex。(请注意,MaxU 的解决方案展示了如何在不使用 DatetimeIndex 的情况下按时间间隔进行分组。)

import pandas as pd

df = pd.DataFrame({'T': ['2015-12-30 22:30:00.0',
                         '2015-12-30 22:35:00.0',
                         '2015-12-30 22:40:00.0',
                         '2015-12-30 23:40:00.0',
                         '2015-11-30 13:40:00.0',
                         '2015-11-30 13:44:00.0',
                         '2015-11-30 19:54:00.0'],
                   'X': [1, 1, 1, 1, 3, 3, 3],
                   'Y': [2, 2, 2, 2, 5, 5, 5]})
df['T'] = pd.to_datetime(df['T'])
df = df.set_index(['T'])
result = df.groupby([pd.TimeGrouper('15Min'), 'X', 'Y']).size()
print(result)
Run Code Online (Sandbox Code Playgroud)

产量

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
Run Code Online (Sandbox Code Playgroud)

这包含您想要的信息

T                    X  Y
2015-11-30 13:30:00  3  5    2
2015-12-30 22:30:00  1  2    3
Run Code Online (Sandbox Code Playgroud)

和更多。目前尚不清楚您希望排除其他行的依据是什么。如果你解释一下这个标准,我们应该能够准确地生成所需的 DataFrame。