【问题标题】:Calculating Active dates based on gap length using Pandas Dataframes使用 Pandas Dataframes 根据间隙长度计算活动日期
【发布时间】:2015-07-03 11:29:09
【问题描述】:

我对 pandas 比较陌生,并试图找出计算此信息的最佳方法是什么,因此非常感谢任何帮助。基本上我有一个看起来像这样的数据框:

id     activity_date
1      2015-01-01      
1      2015-01-02      
1      2015-01-03      
2      2015-01-02      
2      2015-01-05     
3      2015-01-10      

我想计算以下信息“每个帐户活跃了多少天?”,我知道我可以简单地计数来获取此信息,但我想应用以下限制,“如果有 n活动日期之间的天数,仅计算该间隔之前的天数”。

例如,如果 n = 5,则以下应返回活动天数为 4,而不是 6

id     activity_date
1      2015-01-01      
1      2015-01-02      
1      2015-01-04
1      2015-01-06
1      2015-01-14
1      2015-01-15

【问题讨论】:

    标签: python date datetime pandas time-series


    【解决方案1】:

    在了解了你想要的之后这个就简单多了,所以我们计算当前行和前一行之间的差异是否大于 5 天给我们一个布尔系列,我们使用这个过滤器 df 然后使用索引值来执行切片:

    In [57]:
    
    inactive_index = df[df['activity_date'].diff() > pd.Timedelta(5, 'd')]
    inactive_index
    Out[57]:
       id activity_date
    4   1    2015-01-14
    
    In [18]:
    
    inactive.index
    Out[18]:
    Int64Index([4], dtype='int64')
    In [58]:
    
    df.iloc[:inactive.index[0]]
    Out[58]:
       id activity_date
    0   1    2015-01-01
    1   1    2015-01-02
    2   1    2015-01-04
    3   1    2015-01-06
    

    【讨论】:

    • 谢谢,这真的很有帮助。我想我可能已经让我的病情不清楚了,所以这可能是在计算不同的东西。您的 sn-p 似乎将 timedelta 小于 5 的天数相加,我希望在第一次出现 5 天增量后的天数,而不仅仅是折扣具有该增量的天数。例如,如果您从 1 日到 10 日消费,然后从 18 日到 30 日再次消费,仍然只有 10 天。
    • 抱歉,您必须解释一下您是如何在 10 天后到达该示例的
    • 所以你花的每一天都是“活跃的一天”,你没有花的每一天都是不活跃的一天,如果你连续有超过 5 天不活跃,我想基本上设置一个“停用”标志并停止计算活跃天数。
    • 那么如果非活动天数大于 5 天,那么到今天为止正确吗?
    • 是的,就是这样
    猜你喜欢
    • 2015-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多