首页 > 解决方案 > 在熊猫中重新采样时间序列

问题描述

我有一个包含多个及时记录的数据框——特别是每 4 分钟一次。我想绘制时间序列以获得该温度的每日多个值。尽管如此,数据以单一方式而不是每天绘制每个值,如我所愿。

df = pd.read_csv("my_file.csv")
print (df.head())

输出

                       Temperature
Date/Time
2015-07-01 00:00:47        25.21
2015-07-01 00:01:48        25.23
2015-07-01 00:02:48        25.33
2015-07-01 00:03:47        25.22
2015-07-01 00:04:48        25.32

当我与 seaborn 一起绘制时,我得到了这个:

df = df.reset_index()
sns.relplot(x= "Date/Time", y="Temperature", data=df, kind="line")
plt.show()

在此处输入图像描述

这不是我想要绘制的;我想要这样的例子:

在此处输入图像描述

我相信我必须重新采样数据,但我得到了当天的平均值。因此,一天只有一个值,而不是多个值。

df = df.resample("H").mean()
print (df.head())

输出:

                      Temperature
Date/Time
2015-07-01 00:00:00    25.264167
2015-07-01 01:00:00    25.267167
2015-07-01 02:00:00    25.272000
2015-07-01 03:00:00    25.290167
2015-07-01 04:00:00    25.307333

在此处输入图像描述 不是我需要的。你能帮助我吗?

标签: pythonpandasmatplotlibtime-seriesseaborn

解决方案


必须有更好的方法来对时间戳进行分类,但我现在正在画一个空白。

这是一种方法:创建一个新列,在其中删除部分日期/时间信息,以便该时间范围内的所有行共享相同的值。

例如,如果您想按小时分类:

df['Binned time'] = pd.to_datetime(df.index.strftime('%Y-%m-%d %H:00:00'))

或按天数:

df['Binned time'] = pd.to_datetime(df.index.strftime('%Y-%m-%d 00:00:00'))

然后使用线图:

sns.lineplot(data=df, x='Binned time', y='data')

在此处输入图像描述


推荐阅读