【问题标题】:Pandas find duration between dates where a condition is met?熊猫找到满足条件的日期之间的持续时间?
【发布时间】:2018-12-21 23:24:08
【问题描述】:

我有一个看起来像这样的 pandas DataFrame:

╔═══╦════════════╦═════════════╗
║   ║ VENDOR ID  ║ DATE        ║
╠═══╬════════════╬═════════════╣
║ 1 ║ 33         ║ 01/12/2018  ║
║ 2 ║ 33         ║ 03/12/2018  ║
║ 3 ║ 12         ║ 01/08/2018  ║
║ 4 ║ 12         ║ 01/15/2018  ║
║ 5 ║ 12         ║ 01/23/2018  ║
║ 6 ║ 33         ║ 05/12/2018  ║
║ 7 ║ 89         ║ 01/12/2018  ║
╚═══╩════════════╩═════════════╝

我希望得到一个表格,显示自上次出现相同 VENDOR ID 以来的天数,如下所示:

╔═══╦════════════╦═════════════╗
║   ║ VENDOR ID  ║     GAP     ║
╠═══╬════════════╬═════════════╣
║ 1 ║ 33         ║ ----------  ║
║ 2 ║ 33         ║     60      ║
║ 3 ║ 12         ║ ----------  ║
║ 4 ║ 12         ║      7      ║
║ 5 ║ 12         ║      8      ║
║ 6 ║ 33         ║     60      ║
║ 7 ║ 89         ║ ----------  ║
╚═══╩════════════╩═════════════╝

我一直在尝试找到一种使用 groupbys 和其他技巧来实现此目的的方法,但似乎没有任何效果。

我确实想出了我认为在 pandas 中使用 2 个嵌套的 for 循环或 iterrrows 可能会起作用的方法,但由于我的数据集的大小,使用嵌套循环不会真正起作用。

有人有什么想法吗?

【问题讨论】:

    标签: python pandas datetime pandas-groupby


    【解决方案1】:

    我得到了一些不同的输出:

    df['DATE'] = pd.to_datetime(df['DATE'])
    df['GAP'] = df.groupby('VENDOR ID')['DATE'].diff().dt.days
    print (df)
       VENDOR ID       DATE   GAP
    1         33 2018-01-12   NaN
    2         33 2018-03-12  59.0
    3         12 2018-01-08   NaN
    4         12 2018-01-15   7.0
    5         12 2018-01-23   8.0
    6         33 2018-05-12  61.0
    7         89 2018-01-12   NaN
    

    解释

    1. 转换列to_datetime
    2. 然后groupbydiff
    3. 上次将timedeltass 转换为days

    【讨论】:

    • pandas 0.23.1
    • @ALollz - 谢谢。
    • 这是否需要按日期对行进行排序?我知道我的问题中的示例已经排序,但您可能希望将其添加到答案中。顺便说一句,很好的答案,超级快速和乐于助人。
    • @doddy 准确,需要排序日期。
    猜你喜欢
    • 2022-07-22
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    • 2017-09-24
    • 2020-10-19
    • 2018-11-15
    • 2012-09-28
    • 2022-10-12
    相关资源
    最近更新 更多