【问题标题】:How to split pandas record with one large timedelta into multiple records with smaller ones?如何将具有较大时间增量的熊猫记录拆分为具有较小时间增量的多个记录?
【发布时间】:2020-09-13 21:26:01
【问题描述】:

我有一个包含 3 列的数据框:时隙的 timedeltas(持续时间)、时隙开始的日期时间和创建记录时通知的日期时间。时间增量都是 15 分钟的乘数:

Index    duration    slot_start         creation_time

1.       15 minutes  some datetime 1    some datetime 3
2.       45 minutes  some datetime 2    some datetime 4

我想要实现的是:

Index    duration    slot_start                      creation_time

1.       15 minutes  some datetime 1                 some datetime 3
2.       15 minutes  some datetime 2                 some datetime 4
3.       15 minutes  some datetime 2 + 15 minutes    some datetime 4
4.       15 minutes  some datetime 2 + 30 minutes    some datetime 4

有没有这种操作的工具?如何在非常大的数据帧上轻松、高效地实现它?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    试试这个:

    unit = pd.Timedelta(minutes=15)
    s = pd.to_timedelta(df['duration']).div(unit) \
          .apply(lambda n: unit * np.arange(n)) \
          .rename('offset') \
          .explode()
    
    df = df.join(s)
    df['slot_start'] = df['slot_start'] + df['offset']
    

    【讨论】:

    • 这个主意不错,但不会在 slot_start 中增加时间差,这一点很关键。
    • 对不起,我错过了第二个要求。更新了我的答案
    • 绝妙的答案!一个重要提示:此解决方案需要高于 0.25 的 Pandas 版本。在早期版本中,explode 会导致错误。
    猜你喜欢
    • 2019-01-19
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-25
    • 2013-02-15
    • 2014-06-02
    • 1970-01-01
    相关资源
    最近更新 更多