pandas 滑动时间窗乘积

dm7nw8vv  于 2023-06-28  发布在  其他
关注(0)|答案(1)|浏览(69)

我有一个dataframe与2列“日期”和“百分比_变化”。我需要不同时间窗口的百分比变化的乘积。例如,时间窗口= 2:2010年和2011年的产品(1.1 * 0.95); 2011年和2012年; 2019年和2020年。所以对于时间窗口=2,我将得到9个结果。
对于时间窗= 3:2010年、2011年、2012年产品(1.1 * 0.95 * 1.3); 2011年、2012年和2013年;……; 2018年、2019年和2020年。因此,对于时间窗口=3,我将得到8个结果。
对于时间窗= 9:2010年、2011年、2012年、2013年、2014年、……、2019年的产品(1.1 * 0.95 *... * 0.9); 2011,2012,2013,……,2020(0.95 * 1.3 …… 0.9)。因此,对于时间窗口=9,我将得到2个结果。

date        percentage_change
2010-01-01  1.1
2011-01-01  0.95
2013-01-01  1.3
2014-01-01  1.2
2015-01-01  1.1
2016-01-01  0.8
2017-01-01  0.6
2018-01-01  1.1
2019-01-01  1.7
2020-01-01  0.9
6qqygrtg

6qqygrtg1#

您可以使用pd.rolling(window=WINDOW_SIZE)设置窗口大小,然后应用乘法。
下面是一个示例代码(我使用您的数据来生成它):

import pandas as pd
import numpy as np

data = {
    'date': [
        '2010-01-01',  
'2011-01-01',
'2013-01-01',
'2014-01-01',
'2015-01-01',
'2016-01-01',
'2017-01-01',
'2018-01-01',
'2019-01-01',
'2020-01-01'
    ],
    'percentage_change': [
1.1,
0.95,
1.3,
1.2,
1.1,
0.8,
0.6,
1.1,
1.7,
0.9]
}

df = (
pd.DataFrame(data)
.rolling(3)
.apply(np.prod)
.fillna(0)
)
df.head(10)

它获取窗口大小,然后应用np.prodfillna(0)是因为如果我们选择window_size=3,则前两个元素将具有NaN值。
我希望这对你有帮助!

相关问题