【问题标题】:Merge daily values into intraday DataFrame将每日值合并到日内 DataFrame
【发布时间】:2016-12-22 04:46:01
【问题描述】:

假设我有两个DataFramesintraday 每分钟一排,daily 每天一排。

如何添加intraday['some_val'] 列,其中some_val 取自daily['some_val'] 行,其中intraday.index 值(日期组件)等于daily.index 值(日期组件)?

【问题讨论】:

    标签: python datetime pandas dataframe


    【解决方案1】:

    鉴于以下设置,

    intraday = pd.DataFrame(index=pd.date_range('2016-01-01', '2016-01-07', freq='T'))
    daily = pd.DataFrame(index=pd.date_range('2016-01-01', '2016-01-07', freq='D'))
    daily['some_val'] = np.arange(daily.shape[0])
    

    您可以从两个索引的日期部分创建一列,并在该列上合并

    daily['date'] = daily.index.date
    intraday['date'] = intraday.index.date    
    daily.merge(intraday)
    
                date  some_val
    0     2016-01-01         0
    1     2016-01-01         0
    2     2016-01-01         0
    3     2016-01-01         0
    4     2016-01-01         0
    ...          ...       ...
    8636  2016-01-06         5
    8637  2016-01-06         5
    8638  2016-01-06         5
    8639  2016-01-06         5
    8640  2016-01-07         6
    

    或者,您可以利用自动索引对齐,并使用fillna

    intraday['some_val'] = daily['some_val']
    intraday.fillna(method='ffill', downcast='infer')
    
                         some_val
    2016-01-01 00:00:00         0
    2016-01-01 00:01:00         0
    2016-01-01 00:02:00         0
    2016-01-01 00:03:00         0
    2016-01-01 00:04:00         0
    ...                       ...
    2016-01-06 23:56:00         5
    2016-01-06 23:57:00         5
    2016-01-06 23:58:00         5
    2016-01-06 23:59:00         5
    2016-01-07 00:00:00         6
    

    请注意,这仅在您的 daily 索引的时间部分是 00:00 时才有效。

    【讨论】:

    • 我们如何merge 生成一个与高频 DF 具有相同索引的 DataFrame(在这种情况下为intraday)?第一个示例生成一个迭代索引并且似乎丢弃了intraday 索引。另请注意:当且仅当至少一个完全相同的 DateTime 出现在两个 DataFrame 的较低频率中时,第二个示例才有效。例如,如果intraday 每天不包含00:00,即使daily 索引包含,它也会失败。
    • 在这种情况下,您可以只使用daily.merge(intraday).set_index(intraday.index)。看来你不能要求merge保留其中一个数据框的索引(见this answer)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    • 1970-01-01
    • 2017-09-19
    • 2021-02-04
    • 2016-08-31
    • 2015-09-04
    • 2015-09-08
    相关资源
    最近更新 更多