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

如何对多列pandas DataFrame重采样并按请求分组统计小时请求总量

问题原因分析
  • pd.read_csv默认不会解析时间类型字段,RequestDate会被识别为字符串,无法直接调用resample方法;同时resample方法要求作用对象为时间索引序列,直接对普通datetime列调用也会抛出错误。
  • 若确认csv存在RequestDate字段仍报KeyError,大概率是读取后的列名带有多余前后空格,可先执行df.columns = df.columns.str.strip()去除空格后再操作。
  • 你提供的测试csv中计数字段名为RequestCount,和样例里的Count命名不同,统计时要对应正确的字段名。
正确实现代码

首先完成数据基础读取和类型转换:

import pandas as pd

# 读取数据时直接解析时间列,避免后续手动转换
df = pd.read_csv("test_data.csv", parse_dates=["RequestDate"])

方式1:用dt.floor按小时取整后分组统计(写法更直观)

不需要修改索引,直接对时间列按小时取整后多字段分组求和即可:

# 按小时对齐时间、按请求类型分组,对调用量求和
df_result = df.groupby([df["RequestDate"].dt.floor("H"), "Request"])["RequestCount"].sum().reset_index()
# 按需重命名列对齐你提供的输出样例
df_result = df_result.rename(columns={"RequestCount": "Count"})
print(df_result)

方式2:设置时间索引后用resample+groupby实现

如果你习惯用resample语法,可以先把时间列设为索引再操作:

# 将RequestDate设置为时间索引
df = df.set_index("RequestDate")
# 先按请求类型分组,每个分组内按小时重采样求和,最后调整索引顺序、重置索引
df_result = df.groupby("Request").resample("H")["RequestCount"].sum().swaplevel().sort_index().reset_index()
df_result = df_result.rename(columns={"RequestCount": "Count"})
print(df_result)

两种写法输出结果完全一致,都可以得到你期望的每小时各请求总调用量统计结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:24:04