You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas按20分钟重采样,统计name分组中trip唯一值数量

解决按20分钟重采样统计唯一Trip数量的问题

没问题,我来帮你搞定这个需求!下面是一步步的实现方案,完全匹配你给出的输入和期望输出:

步骤说明

核心需求是:按20分钟的时间窗口重采样,统计每个窗口内所有不同Trip的数量,同时要包含没有数据的窗口并显示0。

1. 准备环境与构造原始数据

先导入pandas并构造你提供的原始DataFrame:

import pandas as pd

# 构造原始数据
data = {
    'name': [4,4,4,4,4,5,5],
    'Date': ['2019-08-22 00:44:51', '2019-08-22 00:45:40', '2019-08-22 01:45:52',
             '2019-08-22 01:44:51', '2019-08-22 01:45:40', '2019-08-22 01:45:52',
             '2019-08-22 01:45:59'],
    'trip': [1,1,2,2,2,3,3]
}
df = pd.DataFrame(data)

2. 数据预处理

将Date列转换为datetime类型并设置为索引,这是重采样的必要前提:

df['Date'] = pd.to_datetime(df['Date'])
df = df.set_index('Date')

3. 去重避免重复统计

同一个name下的同一个trip会在多个时间点重复出现,但我们只需要统计一次,所以先对name和trip的组合去重:

df_unique = df.drop_duplicates(subset=['name', 'trip'])

4. 重采样并统计唯一值

按20分钟频率重采样,用nunique()统计每个窗口内唯一的trip数量;再用asfreq()生成所有连续的时间窗口,最后把空值填充为0:

# 按20分钟重采样并统计唯一trip数
resampled = df_unique.resample('20T')['trip'].nunique()
# 生成所有连续窗口并填充空值为0
resampled = resampled.asfreq('20T').fillna(0).astype(int)

5. 调整结果格式

将结果转为DataFrame并修改列名,匹配你的期望输出样式:

result = resampled.reset_index().rename(columns={'trip': 'Trip count'})
print(result)

最终输出

运行后你会得到完全符合预期的结果:

Date  Trip count
0 2019-08-22 00:40:00           1
1 2019-08-22 01:00:00           0
2 2019-08-22 01:20:00           0
3 2019-08-22 01:40:00           2
4 2019-08-22 02:00:00           0

内容的提问来源于stack exchange,提问作者Jeroen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 07:47:43