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

如何使用pandas按5分钟时间窗口统计各国家出现次数并转列

实现代码

import pandas as pd

# 示例数据(你已持有可直接跳过该部分)
data = pd.DataFrame(
    {
        "time": [
            "2021-11-30 00:01:08",
            "2021-11-30 00:01:10",
            "2021-11-30 00:03:08",
            "2021-11-30 00:10:08",
        ],
        "country": ["Czechia","Czechia","USA","Czechia"],
    }
)

# 核心处理逻辑
# 1. 将字符串格式的时间转换为pandas可处理的datetime类型
data["time"] = pd.to_datetime(data["time"])
# 2. 生成5分钟窗口标记,floor('5T')代表按5分钟向下取整,完全匹配你要求的窗口划分规则
data["time_window"] = data["time"].dt.floor("5T")
# 3. 按窗口+国家分组计数,将国家字段从行维度转为列维度,同窗口未出现的国家默认填充0
count_result = data.groupby(["time_window", "country"]).size().unstack(fill_value=0)
# 4. 生成覆盖所有时间区间的完整5分钟窗口序列,补全无数据的空窗口
full_time_windows = pd.date_range(start=count_result.index.min(), end=count_result.index.max(), freq="5T")
# 5. 重新索引补全空窗口数据,删除时间索引后得到最终输出
final_output = count_result.reindex(full_time_windows, fill_value=0).reset_index(drop=True)

print(final_output)

运行后输出结果和你提供的期望格式完全一致。


核心逻辑说明

  • dt.floor('5T')中的T是pandas时间频率中代表分钟的标识,该方法会自动把时间归到所属5分钟窗口的起始时间点,比如00:01、00:03都会归到2021-11-30 00:00:00窗口,完全符合你给定的划分规则
  • unstack操作可以直接把分组后行维度的国家字段转为列维度,一步实现国家名转列的需求
  • 最后生成完整时间序列+reindex的操作,是为了补全没有任何记录的空窗口,避免中间无数据的窗口被遗漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:45:04