Python 熊猫:使用总和乘积滚动窗口
有很多答案,每一个都能为我提供一部分我想要的结果,但我很难把它们放在一起。我的核心Pandas数据框如下所示,其中我试图估算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
音量\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
调用减少为一个:)奇妙的答案。