gpt4 book ai didi

python - 带有时间分组的 Pandas 滚动功能

转载 作者:太空宇宙 更新时间:2023-11-03 11:26:08 25 4
gpt4 key购买 nike

这是我的问题。我有一个 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]。但是,不管resample函数中的how = 'xxx'方法,结果都不对。2个月的客观结果是,

df(窗口 = 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]。

附注标准偏差是我要实现滚动的功能之一......谢谢~

最佳答案

您可以在日期列上使用 to_datetime 来生成日期时间索引。

df = pd.DataFrame({'value': [1, 2, 3, 4, 5, 6]},
index=['2013-10-24', '2013-10-25', '2013-11-27',
'2013-11-28', '2013-12-01', '2013-12-02'])
df.index = pd.to_datetime(df.index)

>>> pd.rolling_mean(df.resample('1M'), 1, freq='1M')
value
2013-10-31 1.5
2013-11-30 3.5
2013-12-31 5.5

>>> pd.rolling_mean(df.resample('2M'), window=1, freq='1M')
value
2013-10-31 1.5
2013-11-30 NaN
2013-12-31 4.5

>>> pd.rolling_mean(df.resample('1M'), window=2, freq='1M')
value
2013-10-31 NaN
2013-11-30 2.5
2013-12-31 4.5

>>> pd.rolling_mean(df.resample('1M'), window=3, freq='1M')
value
2013-10-31 NaN
2013-11-30 NaN
2013-12-31 3.5

>>> pd.rolling_mean(df.resample('1M'), window=12, freq='1M')
value
2013-10-31 NaN
2013-11-30 NaN
2013-12-31 NaN

关于python - 带有时间分组的 Pandas 滚动功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33413082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com