【问题标题】:Compare dates based on group in pandas根据熊猫组比较日期
【发布时间】:2020-10-01 01:17:28
【问题描述】:

好的,所以我想根据记录它们的用户来获取日期和时间之间的差异。我似乎无法在网上找到任何关于此的信息,所以这是我最后的手段。我有这个:

timePage['Time spent on page'] = timePage['date'].diff()

它告诉我日期列上的日期之间的差异,但它也没有考虑到不同的用户。我已经按用户对我的数据进行了分组,然后是实例,然后是日期,并希望代码到达用户组的底部,并说下一个日期不应该与这个日期进行比较,因为它是一个不同的用户。 此外,它不适用于我的数据的第一个索引。那么我如何让它比较第一个和第二个索引,然后将其存储在第一个索引行上呢?

样本数据:

L = [{ "user" : "43tuhgn34",
   "Instance" : "f34yh",
   "Date" : "2019-02-14 12:54:52.000000+00:00"},
 { "user" : "43tuhgn34",
   "Instance" : "wrg32",
   "Date" : "2019-02-15 11:34:12.000000+00:00"},
{ "user" : "erg34g",
   "Instance" : "f34yh",
   "Date" : "2018-03-11 17:21:26.430000+00:00"}]

【问题讨论】:

    标签: python pandas datetime pandas-groupby


    【解决方案1】:

    GroupBy.apply 与 lambda 函数一起使用,bfill 在这里按组工作:

    timePage = pd.DataFrame(L)
    
    timePage['Date'] = pd.to_datetime(timePage['Date'])
    
    timePage['Time spent on page'] = (timePage.groupby('user')['Date']
                                              .apply(lambda x: x.diff().bfill()))
    print (timePage)
            user Instance                             Date Time spent on page
    0  43tuhgn34    f34yh        2019-02-14 12:54:52+00:00           22:39:20
    1  43tuhgn34    wrg32        2019-02-15 11:34:12+00:00           22:39:20
    2     erg34g    f34yh 2018-03-11 17:21:26.430000+00:00                NaT
    

    如果所有组至少有 2 行,则可以将 DataFrameGroupBy.diffbfill 连接起来,但要小心,因为 bfill 此处不适用于每个组:

    timePage = pd.DataFrame(L)
    
    timePage['Date'] = pd.to_datetime(timePage['Date'])
    
    timePage['Time spent on page'] = timePage.groupby('user')['Date'].diff().bfill()
    print (timePage)
    

    【讨论】:

    • 谢谢,但小问题是索引已失效。第三个结果是第二个和第三个日期之间的差异,但如果有意义的话,我需要它是第三个和第四个日期之间的差异
    • @AgentArachnid - 样本数据中没有 3rd4th 日期时间,因此不可能。可以创建minimal, complete, and verifiable example 吗?
    • 这只是一个示例。有没有办法将整列向上移动一行?时间是准确的,但只需要向上移动一行
    • 我找到了 shift 函数,所以我将使用它。 @jezrael 感谢您的代码,它运行良好,
    • 效果也不错。太感谢了。我在应用函数之外放错了移位函数
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 2017-11-03
    • 2021-03-21
    • 1970-01-01
    • 2016-10-01
    相关资源
    最近更新 更多