如何使用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
相关产品推荐
相关产品推荐

