如何在Pandas中仅对指定列按小时统计指定日期数据
按小时统计指定日期的指定列数据解决方案
没问题,我来帮你实现按小时展示指定日期的指定列统计数据的需求,一步步来:
1. 先确保日期列是时间索引
首先得把你的date列转换成pandas的datetime类型,并且设置为DataFrame的索引,这样resample才能正常工作:
import pandas as pd # 你的原始数据 data = { 'date': ['2018-02-11 04:05:33.438948+05:30', '2018-02-11 04:05:37.905242+05:30', '2018-02-11 17:09:47.211344+05:30', '2018-02-11 17:10:13.553385+05:30'], 'location': ['DEL', 'MUM', 'DEL', 'KOL'], 'cpu': [44, 0, 24, 23], 'mem': [23, 23, 34, 35], 'drops': [5.00, 6.08, 4.19, 4.47], 'upload': [14.5, 5.1, 19.4, 11.5], 'download': [44.51, 0.00, 37.53, 46.34] } df = pd.DataFrame(data) # 转换日期列并设置为索引 df['date'] = pd.to_datetime(df['date']) df = df.set_index('date')
2. 过滤指定日期的数据
假设你要统计2018-02-11这一天的数据,用下面的代码过滤:
target_date = '2018-02-11' # 筛选出目标日期的所有行 filtered_df = df[df.index.date == pd.to_datetime(target_date).date()]
3. 选择需要统计的部分列
比如你只想统计cpu、mem、drops这三列,就先筛选出这些列:
# 指定要统计的列 selected_columns = ['cpu', 'mem', 'drops'] filtered_df = filtered_df[selected_columns]
4. 按小时重采样并聚合统计值
用resample('H')按小时分组,然后用agg指定要计算的统计量(均值、最小值、最大值):
# 按小时聚合,计算mean、min、max hourly_stats = filtered_df.resample('H').agg(['mean', 'min', 'max'])
运行结果示例
执行完上面的代码后,hourly_stats会输出如下结果:
cpu mem drops mean min max mean min max mean min max date 2018-02-11 04:00:00 22.0 0 44 23.0 23 23 5.540 5.00 6.08 2018-02-11 17:00:00 23.5 23 24 34.5 34 35 4.330 4.19 4.47
额外提示
- 如果你的日期列已经是datetime类型的索引,可以跳过第一步的转换
- 要是需要统计其他列,只需要修改
selected_columns列表即可 - 除了
mean、min、max,你还可以添加其他聚合函数,比如sum、median等
内容的提问来源于stack exchange,提问作者Souvik Ray
相关产品推荐
相关产品推荐

