Python 熊猫:使用总和乘积滚动窗口

Python 熊猫:使用总和乘积滚动窗口,python,pandas,Python,Pandas,有很多答案,每一个都能为我提供一部分我想要的结果,但我很难把它们放在一起。我的核心Pandas数据框如下所示,其中我试图估算音量\u步骤1: date volume_step_0 volume_step_1 2018-01-01 100 a 2018-01-02 101 b 2018-01-03 105 c 201

有很多答案,每一个都能为我提供一部分我想要的结果,但我很难把它们放在一起。我的核心Pandas数据框如下所示,其中我试图估算
音量\u步骤1

date        volume_step_0     volume_step_1
2018-01-01            100                 a
2018-01-02            101                 b
2018-01-03            105                 c
2018-01-04            123                 d
2018-01-05            121                 e
然后我有一个参考表,上面有转换率,例如

step     conversion
0              0.60
1              0.81
2              0.18
3              0.99
4              0.75
我还有另一张表,其中包含泊松分布的点估计:

days_to_complete    step_no     pc_cases
0                         0         0.50
1                         0         0.40
2                         0         0.07
利用这些数据,我现在要估计

volume_step_1 = 
(volume_step_0(today) * days_to_complete(step0, day0) * conversion(step0)) + 
(volume_step_0(yesterday) * days_to_complete(step0,day1) * conversion(step0))
等等

如何编写一些Python代码来实现这一点?

调用您的数据帧(自上而下为
df1
df2
df3
):

编辑: IIUC,您正试图在
体积步骤步骤步骤0
列与特定
步骤步骤步骤编号的
pc案例
转换
的乘积之间获得某种“点积”。您可以
合并
df2和df3以匹配
步骤

df_merged = df_merged = df2.merge(df3, how = 'left', left_on = 'step', right_on = 'step_no')
df_merged.head(3)

       step  conversion  days_to_complete  step_no  pc_cases
0   0.0         0.6               0.0      0.0      0.50
1   0.0         0.6               1.0      0.0      0.40
2   0.0         0.6               2.0      0.0      0.07
我猜您只是使用
stepk
来获取
volume\u step\u k+1
,并且您希望在几天内迭代求和。以下代码为
days\u to\u complete
中可用的
k
的所有值生成
days\u to\u complete(step0,dayk)
conversion(step0)
的向量,并找到它们的乘积:

df_fin = df_merged[df_merged['step'] == 0][['conversion', 'pc_cases']].product(axis = 1)

0    0.300
1    0.240
2    0.042

   df_fin = df_fin[::-1].reset_index(drop = True)
最后,您希望通过
体积步骤0
向量获得
天数到完成时间
*
转换
向量的点积,用于滚动窗口(因为在
天数到完成时间
中存在许多值):

输出:

df1
         date volume_step_0  volume_step_1
0  2018-01-01           100            NaN
1  2018-01-02           101            NaN
2  2018-01-03           105         70.230
3  2018-01-04           123         66.342
4  2018-01-05           121         59.940
虽然这决不是一个全面的解决方案,但正如您所要求的那样,代码旨在提供“对多个产品求和”的逻辑。

调用您的数据帧(自上而下分别为
df1
df2
df3
):

编辑: IIUC,您正试图在
体积步骤步骤步骤0
列与特定
步骤步骤步骤编号的
pc案例
转换
的乘积之间获得某种“点积”。您可以
合并
df2和df3以匹配
步骤

df_merged = df_merged = df2.merge(df3, how = 'left', left_on = 'step', right_on = 'step_no')
df_merged.head(3)

       step  conversion  days_to_complete  step_no  pc_cases
0   0.0         0.6               0.0      0.0      0.50
1   0.0         0.6               1.0      0.0      0.40
2   0.0         0.6               2.0      0.0      0.07
我猜您只是使用
stepk
来获取
volume\u step\u k+1
,并且您希望在几天内迭代求和。以下代码为
days\u to\u complete
中可用的
k
的所有值生成
days\u to\u complete(step0,dayk)
conversion(step0)
的向量,并找到它们的乘积:

df_fin = df_merged[df_merged['step'] == 0][['conversion', 'pc_cases']].product(axis = 1)

0    0.300
1    0.240
2    0.042

   df_fin = df_fin[::-1].reset_index(drop = True)
最后,您希望通过
体积步骤0
向量获得
天数到完成时间
*
转换
向量的点积,用于滚动窗口(因为在
天数到完成时间
中存在许多值):

输出:

df1
         date volume_step_0  volume_step_1
0  2018-01-01           100            NaN
1  2018-01-02           101            NaN
2  2018-01-03           105         70.230
3  2018-01-04           123         66.342
4  2018-01-05           121         59.940

虽然这决不是一个全面的解决方案,但正如您所问,代码旨在提供“求多个产品之和”的逻辑。

谢谢,在我的最小可行数据集环境中,这是可行的,但我的实际时间延迟会持续数百天,并且会根据步骤发生显著变化。我怎样才能输入任意天数?你的意思是,如果你想估算像
第2步
第3步
等的天数,我可以从你的答案中计算出来。按照
volume\u step\u 1
,我的实际数据在df2中的每个步骤大约有100多天。如何在不需要100多条不同的sum语句的情况下编写计算?FTFY,如果要在布尔掩码上建立索引,然后选择列,请使用
loc
。。。这将两个
\uuuu getitem\uuuuu
调用减少为一个:)顺便说一句,答案太棒了。谢谢,在我的最小可行数据集环境中,这是可行的,但我的实际时间延迟会持续数百天,并且会根据步骤发生显著变化。我怎样才能输入任意天数?你的意思是,如果你想估算像
第2步
第3步
等的天数,我可以从你的答案中计算出来。按照
volume\u step\u 1
,我的实际数据在df2中的每个步骤大约有100多天。如何在不需要100多条不同的sum语句的情况下编写计算?FTFY,如果要在布尔掩码上建立索引,然后选择列,请使用
loc
。。。顺便说一句,这将两个
\uuu getitem\uuu
调用减少为一个:)奇妙的答案。