基于python中的多个列创建条件滚动时差窗口

问题描述

我将尝试简要介绍我的查询,如果需要更多信息,请告诉我。

我的查询是创建一个'10'天的滚动时间窗口,并在其上应用一些业务规则。在应用业务规则并更新了各个列之后,请更改开始日期,然后再次计算时间窗口并应用规则。

举个例子:

dict = { 'Store' : ['A','A','B','B'],'Date':['4/1/2020','4/5/2020','4/7/2020','4/8/2020','4/10/2020','4/12/2020','4/16/2020','4/4/2020','4/6/2020','4/17/2020'],'Rule1':[ 'Invalid','Valid','Invalid','',''],'Rule2':[ 'Valid','Rule3':[ 'Valid','Rule4':[ 'Valid','']
}
df = pd.DataFrame(dict)

数据框看起来像这样:

    Store   Date    Rule1   Rule2   Rule3   Rule4
0   A   4/1/2020    Invalid Valid   Valid   Valid
1   A   4/5/2020    Valid   Invalid Invalid Invalid
2   A   4/7/2020    Invalid Invalid Invalid Invalid
3   A   4/8/2020    Invalid Invalid Valid   Invalid
4   A   4/10/2020   Valid   Invalid Valid   Valid
5   A   4/12/2020   Invalid Valid   Invalid Invalid
6   A   4/16/2020   Valid   Invalid Valid   Valid
7   B   4/4/2020                
8   B   4/6/2020                
9   B   4/7/2020                

以下是选择开始日期的条件:

  1. 按商店分组,和
  2. BRx列应至少包含一个“有效”

滚动窗口以索引“ 0”开始,索引0至索引4(10天窗口)适用于不同的规则。列规则“ X”将相应更新。现在,将index1选择为下一个开始日期,因为Rule1在那里有一个“有效”记录,依此类推,就是index3。

我遇到了障碍,不知道如何进行。非常感谢您在这里的帮助。谢谢:)

预期产量

期望是:

  1. 要计算“ data_diff”列,以计算从起点开始的日期差。 (在RuleX栏中发布将应用和更新哪些规则)
  2. 此起点从找到“有效”的行开始更新:
    第一遍之后:
  Store   Date    Date_diff  Rule1   Rule2    Rule3   Rule4
0   A   4/1/2020    0         Invalid   Valid   Valid   Valid
1   A   4/5/2020    4         Valid     Invalid Invalid Invalid
2   A   4/7/2020    6         Invalid   Invalid Invalid Invalid
3   A   4/8/2020    7         Invalid   Invalid Valid   Invalid
4   A   4/10/2020   9         Valid     Invalid Valid   Valid
5   A   4/12/2020   11        
6   A   4/16/2020   15        
7   B   4/4/2020    0           
8   B   4/6/2020    2           
9   B   4/7/2020    3           

第二遍之后:

  Store   Date    Date_diff  Rule1   Rule2    Rule3   Rule4
0   A   4/1/2020    0         Invalid   Valid   Valid   Valid
1   A   4/5/2020    0         Valid     Invalid Invalid Invalid
2   A   4/7/2020    2         Invalid   Invalid Invalid Invalid
3   A   4/8/2020    3         Invalid   Invalid Invalid Invalid
4   A   4/10/2020   5         Invalid       Invalid Valid   Valid
5   A   4/12/2020   7         Invalid    Valid   Invalid Valid
6   A   4/16/2020   11       
7   B   4/4/2020    0           
8   B   4/6/2020    2           
9   B   4/7/2020    3           

第三遍将从索引4开始,因为它具有“有效”记录

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)