如何基于单个pandas DataFrame为各分类绘制离散时间桶时间序列图
实现方案
你当前的循环写法可正常运行,更符合pandas惯用风格的写法可以避免手动遍历分类,性能更高、代码更简洁,核心是利用groupby+重采样+行列转换直接生成可一键绘图的宽表结构:
优化后的实现代码
import pandas as pd import matplotlib.pyplot as plt # 读取与预处理数据 raw_df = pd.read_csv('...') raw_df['time'] = pd.to_datetime(raw_df['time']) # 一步完成分组、重采样聚合、格式转换,直接绘图 ( raw_df.set_index('time') .groupby('name')['value'] .resample('10T') .max() .unstack(level=0) # 把name分类从行索引转为列,每列对应一个分类的时间序列 .plot() ) plt.legend() plt.show()
写法优势
- 不需要手动提取唯一分类、排序、循环过滤数据,所有逻辑由pandas内部优化实现,数据量较大时性能明显优于手动循环
- 代码逻辑更紧凑,原生支持分类自动排序、自动生成图例,不需要手动指定label
- 如果需要自定义绘图轴,也可以把生成的宽表赋值给变量后指定ax参数:
fig, ax = plt.subplots(figsize=(12,6)) processed_df = ( raw_df.set_index('time') .groupby('name')['value'] .resample('10T') .max() .unstack(level=0) ) processed_df.plot(ax=ax)
内容的提问来源于stack exchange,提问作者Elliot
相关产品推荐
相关产品推荐

