如何从每月重新采样到每年,然后再重新回到每月,其中每月值=每年?

时间:2018-06-29 16:59:40

标签: python pandas matplotlib

我有一个每月的时间序列,已使用

转换为年平均数
ts_ann =ts_mo['Value'].resample('A').mean()

我接下来要做的是创建一个新的时间序列,其中月值等于年值。这样,我可以绘制每月图表,突出显示年度平均值,但也可以显示每月频率。寻找解决方案的运气不佳。谢谢

2 个答案:

答案 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()

返回:

enter image description here