【问题标题】:Resample daily data to hourly dataframe and copy contents将每日数据重新采样到每小时数据框并复制内容
【发布时间】:2023-03-19 13:07:02
【问题描述】:

我有以下数据框:

    Date        Holiday
0   2018-01-01  New Year's Day
1   2018-01-15  Martin Luther King, Jr. Day
2   2018-02-19  Washington's Birthday
3   2018-05-08  Truman Day
4   2018-05-28  Memorial Day
...     ...     ...
58  2022-10-10  Columbus Day
59  2022-11-11  Veterans Day
60  2022-11-24  Thanksgiving
61  2022-12-25  Christmas Day
62  2022-12-26  Christmas Day (Observed)

我想重新采样此数据框,使其成为每日 df 的每小时 df(同时将假期列中的内容复制到正确的日期)。我希望它看起来像这样[忽略表格的索引,它应该比这更多的数字]

    Timestamp           Holiday
0   2018-01-01 00:00:00     New Year's Day
1   2018-01-01 01:00:00     New Year's Day
2   2018-01-01 02:00:00     New Year's Day
3   2018-01-01 03:00:00     New Year's Day
4   2018-01-01 04:00:00     New Year's Day
5   2018-01-01 05:00:00     New Year's Day
...     ...     ...
62  2022-12-26 20:00:00     Christmas Day (Observed)
63  2022-12-26 21:00:00     Christmas Day (Observed)
64  2022-12-26 22:00:00     Christmas Day (Observed)
65  2022-12-26 23:00:00     Christmas Day (Observed)

最快的方法是什么?提前致谢。

【问题讨论】:

  • 你试过用resample了吗?
  • 使用ignoring's answer,您将在 2018 年 1 月 1 日至 2018 年 1 月 14 日之间的 假日 列中填写“新年”。这是正确的吗?
  • @Terry 实际上是的,你是对的,我刚刚注意到,让我试试你的答案。

标签: python python-3.x pandas


【解决方案1】:

怎么样

df.set_index("Date").resample("H").ffill().reset_index().rename(
    {"Date": "Timestamp"}, axis=1
)

【讨论】:

    【解决方案2】:

    (1) 使用date_range 创建一个新的DataFrame,(2) 将它与原始DF 连接,(3) 使用reset_index 再次将日期作为一列,(4) 使用groupby 填充空槽和ffill,(5) 对值进行排序并删除重复项/NaN 值。

    dates = pd.DataFrame(pd.date_range(df2['date'].min(), df2['date'].max(), freq='H'), columns=['date']).set_index('date')
    
    df3 = pd.concat([df2.set_index('date'), dates], sort = False)
    
    df3.reset_index(inplace = True)
    
    df3['Holiday'] = df3.groupby(df3['date'].dt.date)['Holiday'].ffill()
    
    df3 = df3.sort_values('date').drop_duplicates().dropna(axis = 0)
    

    【讨论】:

      猜你喜欢
      • 2019-02-10
      • 2020-09-19
      • 2018-08-26
      • 1970-01-01
      • 2021-10-30
      • 2019-05-29
      • 1970-01-01
      • 1970-01-01
      • 2023-01-28
      相关资源
      最近更新 更多