我有一个每月的时间序列,已使用
转换为年平均数ts_ann =ts_mo['Value'].resample('A').mean()
我接下来要做的是创建一个新的时间序列,其中月值等于年值。这样,我可以绘制每月图表,突出显示年度平均值,但也可以显示每月频率。寻找解决方案的运气不佳。谢谢
答案 0 :(得分:0)
您可以在两个DataFrame的索引上进行左外部合并。这将在1月至11月的年列中产生NaN
的DataFrame,并在Dezember中产生实际的年均值。
然后,使用大熊猫NaN
方法向后填充fillna
值:
ts_mo.merge(ts_ann, left_index=True, right_index=True, how='left').fillna(method='bfill')
通过在suffixes=('_monthly', '_yearly_average')
调用中指定merge
,可以为结果列赋予有意义的名称。
答案 1 :(得分:0)
您可以使用groupby进行变换以获取年度平均值。将其分配给新列,即可开始绘制。
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()
返回: