首页 > 解决方案 > 如何同时显示聚合值和非聚合值?

问题描述

在一年的时间里,我有一个每小时的时间序列。我想在图表中显示每日和/或每月汇总值以及源数据。据推测,最可靠的方法是将这些聚合值添加到源数据框中并从那里获取。我知道如何拍摄这样的每小时系列:

在此处输入图像描述

并像这样显示全年的时间:

在此处输入图像描述

但我正在寻找的是显示如下所示的整个内容,其中聚合数据与源数据一起显示。模拟示例:

在此处输入图像描述

我想为各种时间聚合做它,比如日、周、月、季度和年。

我知道这个问题有点宽泛,但是我一直在努力解决这个问题的时间比我想承认的要长。感谢您的任何建议!

import pandas as pd
import numpy as np

np.random.seed(1)

time = pd.date_range(start='01.01.2020', end='31.12.2020', freq='1H')
A = np.random.uniform(low=-1, high=1, size=len(time)).tolist()

df1 = pd.DataFrame({'time':time, 'A':np.cumsum(A)})
df1.set_index('time', inplace=True)
df1.plot()


times = pd.DatetimeIndex(df1.index)
df2 = df1.groupby([times.month, times.day]).mean()

df2.plot()

代码示例:

标签: pythonpandas

解决方案


您正在寻找step功能,以及 groupby 的不同方式:

# replace '7D' with '1D' to match your code
# but 1 day might be too small to see the steps
df2 = df1.groupby(df1.index.floor('7D')).mean()

plt.step(df2.index, df2.A, c='r')
plt.plot(df1.index, df1.A)

输出:

在此处输入图像描述


推荐阅读