Python 如果月值=年,如何从月到年再到月重新采样?
我有一个每月的时间序列,我已经用Python 如果月值=年,如何从月到年再到月重新采样?,python,pandas,matplotlib,Python,Pandas,Matplotlib,我有一个每月的时间序列,我已经用 ts_ann =ts_mo['Value'].resample('A').mean() 我接下来要做的是创建一个新的时间序列,其中每月值等于每年值。这样,我可以绘制月度图表,突出显示年度平均值,但也可以显示月度频率。没有太多的运气寻找解决方案。谢谢您可以在索引上对两个数据帧进行左外合并。这将生成一个数据框,其中在1月至11月的年度列中包含NaN,以及Dezember的实际年度平均值。 然后使用pandasfillna方法向后填充NaN值: ts_mo.merg
ts_ann =ts_mo['Value'].resample('A').mean()
我接下来要做的是创建一个新的时间序列,其中每月值等于每年值。这样,我可以绘制月度图表,突出显示年度平均值,但也可以显示月度频率。没有太多的运气寻找解决方案。谢谢您可以在索引上对两个数据帧进行左外合并。这将生成一个数据框,其中在1月至11月的年度列中包含
NaN
,以及Dezember的实际年度平均值。
然后使用pandasfillna
方法向后填充NaN
值:
ts_mo.merge(ts_ann, left_index=True, right_index=True, how='left').fillna(method='bfill')
通过在
merge
调用中指定后缀=(“'u monthly','u yearly'u average')
,可以为结果列指定有意义的名称。可以使用groupby和transform获得年平均值。将其指定给一个新列,即可进行绘图
ts_mo['Year_mean'] = ts_mo.groupby(ts_mo.index.year)['Value'].transform('mean')
完整示例:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(400)
ts_mo = pd.DataFrame({
'date': pd.date_range(start='2016',end='2018', freq='M'),
'Value': np.random.randint(0,100, size=24)
}).set_index('date')
ts_mo['Year_mean'] = ts_mo.groupby(ts_mo.index.year)['Value'].transform('mean')
ts_mo.plot(x=ts_mo.index, y=['Value','Year_mean'])
plt.show()
返回:
谢谢。我试过并收到了以下消息。。。ValueError:无法将DataFrame与类型为的实例合并我想我知道为什么会出现此错误,但我是python新手,因此不确定解决方案!输入:键入(ts_-ann)输出:pandas.core.series.series和输入:键入(ts_-mo)输出:pandas.core.frame.DataFrame您的年度数据似乎是一个系列,而不是一个数据框。也许您应该使用:ts_ann=ts_mo[['Value']]].resample('A').mean(),它从ts_mo创建一个子数据帧,而不是仅使用一个围绕“Value”的参数来创建一个序列。这有用吗?