【发布时间】:2015-10-30 10:22:21
【问题描述】:
这是我的问题。 我所拥有的是一个 DataFrame,如下所示:
df:
2013-10-24 1
2013-10-25 2
2013-11-27 3
2013-11-28 4
2013-12-01 5
2013-12-02 6
我想要的是这样的 DataFrame:
rolling_mean(df, window='1M'):
2013-10 1.5
2013-11 3.5
2013-12 5.5
rolling_mean(df, window='2M'):
2013-10 NAN
2013-11 2.5
2013-12 4.5
rolling_mean(df, window='3M'):
2013-10 NAN
2013-11 NAN
2013-12 3.5
rolling_mean(df, window='1Y'):
2013-10 NAN
2013-11 NAN
2013-12 NAN
其中 1M 是“1 个月”,2M 是“2 个月”。窗口不是一个int值,而是一个时间间隔,如'1D'、'3M'、'1Y'等。该函数可以将数据帧按'D'、'M'、'Y'等时间单位分组,然后将数据帧滚动到时间单位之前的数字如1、3...
我需要这样的滚动功能吗? 有人可以帮助我吗?我描述清楚了吗? 非常感谢。
更新:
我还有一个谜。 我需要实现这样一个函数,它可以计算每天的滚动标准偏差,而不是按月重新采样,而是按月加权窗口步长单位。
在这种情况下, 我所拥有的也是 df:
2013-10-24 1
2013-10-25 2
2013-11-27 3
2013-11-28 4
2013-12-01 5
2013-12-02 6
pd.rolling_std(df.resample('1M'),window=1):
结果是
2013-10 NAN
2013-11 NAN
2013-12 NAN
我真正是这样的数据框(window = 1):
2013-10 0.5
2013-11 0.5
2013-12 0.5
第一个 0.5 是标准偏差,可以通过 np.sqrt([1,2]) 从 10 月开始计算。 其他 0.5 也来自 [3,4] 和 [5,6]。 但是,无论怎么='xxx'方法在resample函数中,结果都不对。 2个月的客观结果是,
df (window = 2 ):
2013-10 NAN
2013-11 1.1180
2013-12 1.1180
第一个 1.1180 是标准差,可以通过 np.sqrt([1,2,3,4]) 从 10 月和 11 月计算。 2013-12 的 1.1180 来自 2013-11 和 2013-12 的 [3,4,5,6]。
附言 标准偏差是我想要实现滚动的功能之一...... 谢谢~
【问题讨论】:
-
我认为
rolling_mean的freq参数是你所追求的,但你需要一个 datetimeindex 才能工作 -
你能给我看一个简单的示例代码吗?熊猫新手,谢谢! @EdChum