基于时间索引的多DataFrame特定列聚合值无偏移绘图问题
问题描述
现有三个包含date_time和value列的Pandas DataFrame,已通过pd.concat结合groupby生成按时间戳聚合求和的汇总DataFrame。但当前绘图代码导致df2、df3出现时间偏移,需在同一图表中无偏移展示三个原始DataFrame的value列及汇总DataFrame的value列。
问题原因
当前代码直接对value列绘图时,Pandas默认使用DataFrame的整数索引作为x轴,而非date_time列。由于df1、df2、df3的时间序列起始点不同,但整数索引均从0开始,绘图时会将三个DataFrame的第0行对齐到x轴同一位置,导致时间偏移。
解决方案
将所有DataFrame的date_time列转换为时间类型并设置为索引,让绘图时以实际时间戳作为x轴,确保数据按真实时间对齐。
完整代码
import pandas as pd import matplotlib.pyplot as plt labels=['1','2','3','Aggregated'] # 初始化并处理原始DataFrame df1 = pd.DataFrame({ 'date_time': ["2022-10-06 17:23:11","2022-10-06 17:23:12","2022-10-06 17:23:13","2022-10-06 17:23:14","2022-10-06 17:23:15","2022-10-06 17:23:16"], 'value': [4, 5, 6, 7, 8, 9] }) df1['date_time'] = pd.to_datetime(df1['date_time']) df1.set_index('date_time', inplace=True) df2 = pd.DataFrame({ 'date_time': ["2022-10-06 17:23:13","2022-10-06 17:23:14","2022-10-06 17:23:15","2022-10-06 17:23:16","2022-10-06 17:23:17","2022-10-06 17:23:18"], 'value': [4, 5, 6, 7, 8, 9] }) df2['date_time'] = pd.to_datetime(df2['date_time']) df2.set_index('date_time', inplace=True) df3 = pd.DataFrame({ 'date_time': ["2022-10-06 17:23:16","2022-10-06 17:23:17","2022-10-06 17:23:18","2022-10-06 17:23:19","2022-10-06 17:23:20","2022-10-06 17:23:21"], 'value': [4, 5, 6, 7, 8, 9] }) df3['date_time'] = pd.to_datetime(df3['date_time']) df3.set_index('date_time', inplace=True) # 生成聚合DataFrame combined_data = pd.concat([df1, df2, df3]) df_aggregated = combined_data.groupby(level='date_time')['value'].sum().reset_index() df_aggregated.set_index('date_time', inplace=True) # 绘制时间序列图 for data_frame, label in zip([df1, df2, df3, df_aggregated], labels): data_frame['value'].plot(label=label) # 配置图表样式 plt.legend() plt.xlabel('时间') plt.ylabel('数值') plt.title('原始数据与聚合数据时间序列对比') plt.show()
关键说明
- 将
date_time转换为datetime类型并设为索引,确保x轴对应真实时间戳,避免偏移。 - 聚合时基于时间索引分组,保证汇总结果的时间轴与原始数据一致。
- 添加图例、坐标轴标签和标题,提升图表可读性。
内容的提问来源于stack exchange,提问作者H.Jamil
相关产品推荐
相关产品推荐

