我有以下工作示例,我计算此时间序列的每个月的正态分布。我正在寻找的是一个汇总分布,它返回12个值,因此对于每年计算的月数。换句话说,1月的子集包括2011年1月,2012年,2013年,2014年的数据,从中计算分布。
from scipy.stats import norm
import pandas as pd
import numpy as np
def some_function(data):
mu, std = norm.fit(data)
a = mu * 3
b = std * 5
return a, b
rng = pd.date_range('1/1/2011', periods=4*365, freq='D')
ts = pd.Series(np.random.randn(len(rng)), index=rng)
ts.groupby(pd.TimeGrouper('M')).apply(some_function).apply(pd.Series).rename(columns={0: 'mu', 1: 'std'})
干杯
答案 0 :(得分:2)
您可以在日期时间索引中使用year属性:
In [11]: ts.groupby(ts.index.year).apply(some_function).apply(pd.Series).rename(columns={0: 'mu', 1: 'std'})
Out[11]:
mu std
2011 0.110566 4.827900
2012 -0.094430 4.950958
2013 -0.097986 4.965611
2014 -0.078819 4.709263