【问题标题】:Transfer values between 2 dataframes based on time granularity根据时间粒度在 2 个数据帧之间传输值
【发布时间】:2019-09-12 11:32:37
【问题描述】:

我有一个数据帧,df_60,时间粒度为 60 分钟。另一个以 30 分钟为粒度,df_30。我想将值从df_60 的列移动到df_30 的列,并保持值出现的持续时间。

假设我的日期为2011-01-05 00:00:00 0,每小时粒度,它在val 列中的值为1。我如何始终“填写”30 分钟时间范围的值60 分钟数据框中的一列等于 x 吗?

>>>df_60
dt_hr_idx           val #here val = 1 for times between 2am and 4am
2011-01-05 00:00:00 0
2011-01-05 01:00:00 0
2011-01-05 02:00:00 1
2011-01-05 03:00:00 1
2011-01-05 04:00:00 0

>>>df_30
dt_hlaf_hr_idx      val #df_30 val column is currently blank
2011-01-05 00:00:00 0
2011-01-05 00:30:00 0
2011-01-05 01:00:00 0
2011-01-05 01:30:00 0
2011-01-05 02:00:00 0
2011-01-05 02:30:00 0
2011-01-05 03:00:00 0
2011-01-05 03:30:00 0
2011-01-05 04:00:00 0

#desired df
df_30
dt_hlaf_hr_idx      val  #val should be 1 for values between 2am and 4am
2011-01-05 00:00:00 0
2011-01-05 00:30:00 0
2011-01-05 01:00:00 0
2011-01-05 01:30:00 0
2011-01-05 02:00:00 1
2011-01-05 02:30:00 1
2011-01-05 03:00:00 1
2011-01-05 03:30:00 1
2011-01-05 04:00:00 0

我可以用循环破解一些东西,但是有没有可用的合理方法?

谢谢。

【问题讨论】:

    标签: pandas python-2.7 datetime


    【解决方案1】:

    Series.reindexffill 一起使用:

    df = df_60.reindex(df_30.index, method='ffill')
    print (df)
                         val
    2011-01-05 00:00:00    0
    2011-01-05 00:30:00    0
    2011-01-05 01:00:00    0
    2011-01-05 01:30:00    0
    2011-01-05 02:00:00    1
    2011-01-05 02:30:00    1
    2011-01-05 03:00:00    1
    2011-01-05 03:30:00    1
    2011-01-05 04:00:00    0
    

    merge_asof 的另一个解决方案:

    df = pd.merge_asof(df_30, df_60, left_index=True, right_index=True)
    print (df)
                         val_x  val_y
    2011-01-05 00:00:00      0      0
    2011-01-05 00:30:00      0      0
    2011-01-05 01:00:00      0      0
    2011-01-05 01:30:00      0      0
    2011-01-05 02:00:00      0      1
    2011-01-05 02:30:00      0      1
    2011-01-05 03:00:00      0      1
    2011-01-05 03:30:00      0      1
    2011-01-05 04:00:00      0      0
    

    【讨论】:

    • 我知道我会为此自责,我真的必须让自己熟悉 API。我会接受第二个建议。为响应干杯。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多