【问题标题】:Filling in timeseries based on matching hour/minute between dataframes根据数据帧之间的匹配小时/分钟填充时间序列
【发布时间】:2021-01-07 16:14:17
【问题描述】:

我正在尝试根据一天的数据创建一个包含一年数据的数据框。我所有的数据都是分钟级别的频率。为此,我使用 pandas date_range 函数创建了一个新数据框来创建索引:

df_fullyear = pd.DataFrame(index=pd.date_range(start='2029-01-01', end='2030-01-01', freq='T', closed='left'))

从那里,我想根据匹配的小时/分钟从我的单日数据框中复制值 - 例如,每当我的全年数据框中的 4:00 时,我希望从我的 4:00 获取值单日数据框。以下是我尝试匹配这两个数据帧的尝试——它绝对行不通,但我想不出一种更优雅的方法来做到这一点,而不需要循环遍历每一小时和每一分钟并分配全年 df 位位。

(df_fullyear.index.hour == dfs[2029].index.hour) & (df_fullyear.index.minute == dfs[2029].index.minute)

在数据帧之间按小时/分钟进行匹配的最 Pythonic 方式是什么?

【问题讨论】:

    标签: python pandas dataframe datetime time-series


    【解决方案1】:

    您可以像这样重复每日数据中的值:

    import numpy as np
    import pandas as pd
    df_fullyear = pd.DataFrame(
        index=pd.date_range(
            start='2029-01-01',
            end='2030-01-01',
            freq='T',
            closed='left'))
    day_data = pd.Series(
        index=pd.date_range("2000-01-01", "2000-01-02", freq="T", closed="left"),
        data=np.random.randn(24 * 60))
    num_days, rem = divmod(len(df_fullyear), len(day_data))
    assert rem == 0
    values = np.tile(day_data.values, num_days)
    df_fullyear['mycol'] = values
    
    print(df_fullyear[
        (df_fullyear.index.minute==0) & (df_fullyear.index.hour==4)])
    

    输出:

                            mycol
    2029-01-01 04:00:00 -0.646003
    2029-01-02 04:00:00 -0.646003
    ...
    

    【讨论】:

      猜你喜欢
      • 2023-02-08
      • 1970-01-01
      • 2022-01-12
      • 2021-07-18
      • 1970-01-01
      • 2020-06-22
      • 1970-01-01
      • 1970-01-01
      • 2021-11-12
      相关资源
      最近更新 更多