计算python熊猫中的条件日期差异

时间:2020-08-26 19:23:43

标签: python pandas pandas-groupby diff python-datetime

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

我的查询是基于滚动时间窗口概念创建“ Date_Diff”列。此df的Date_Diff <10天的子集将被处理,并且Rule列将被更新。 下一个开始计算“ Date_difference”的日期应该是至少有一个“有效”记录的行。

举个例子:

dict = { 'Store' : ['A','A', 'A', 'A', 'A', 'A', 'A', 'B', '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':[ '', '', '', '', '', '', '','','',''],
        'Rule2':[ '', '', '', '', '', '', '','','',''],
        'Rule3':[ '', '', '', '', '', '', '','','',''],
        'Rule4':[ '', '', '', '', '', '', '','','','']
}
df = pd.DataFrame(dict)

数据框看起来像这样:

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

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

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

滚动窗口以索引“ 0”开始,处理索引0至索引4(10天窗口)并应用方法。列规则“ X”将相应更新。现在,将index1选择为下一个开始日期,因为Rule1具有“有效”记录。

    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/18/2020   14          

第一次迭代后,索引1成为开始日期“ Date_Diff”,应该这样计算,并且看起来应该像这样

    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 Valid   Invalid
4   A   4/10/2020   5           Valid   Invalid Valid   Valid
5   A   4/12/2020   7           Invalid Valid   Invalid Invalid
6   A   4/16/2020   11          Valid   Invalid Valid   Valid
7   B   4/4/2020    0           
8   B   4/6/2020    2           
9   B   4/18/2020   14          

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

0 个答案:

没有答案