You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

合并具有不同时间粒度DateTime Index的两个DataFrame:将日度数据填充至30分钟粒度DataFrame并保持其结构

解决不同时间粒度DataFrame的填充问题

没问题,这是时间序列数据处理里很常见的对齐需求,我来给你一步步演示怎么实现:

步骤1:先构造示例数据(方便你复现测试)

首先我们把你描述的两个DataFrame用Pandas创建出来,确保和你的场景完全匹配:

import pandas as pd

# 30分钟粒度的第一个DataFrame
df1 = pd.DataFrame(
    data={'col1': ['a', 'b', 'c', 'd', 'e'], 'col2': [1, 2, 3, 4, 5]},
    index=pd.to_datetime([
        '2019-08-26 13:00:00', '2019-08-26 13:30:00',
        '2019-08-26 14:00:00', '2019-08-26 14:30:00',
        '2019-08-26 15:00:00'
    ])
)

# 日粒度的第二个DataFrame
df2 = pd.DataFrame(
    data={'col3': ['X', 'Y', 'Z']},
    index=pd.to_datetime(['2019-08-25', '2019-08-26', '2019-08-27'])
)

步骤2:核心对齐填充逻辑

关键思路是把第一个DataFrame的时间索引“归一化”到日期级,让它能和第二个DataFrame的日索引完美匹配,然后批量填充对应值。一行代码就能搞定:

# 将df2的日粒度值填充到df1对应的所有当日行中
df1['col3'] = df1.index.normalize().map(df2['col3'])

代码细节解释:

  • df1.index.normalize():把30分钟粒度的时间索引转换为当日的午夜时间(比如2019-08-26 13:00:00会变成2019-08-26 00:00:00),这样就和df2的日粒度索引格式完全一致了。
  • .map(df2['col3']):根据归一化后的日期,自动从df2中取出对应日期的col3值,填充到df1的每一行里。

最终结果

运行完上面的代码后,你打印df1就会得到你想要的结构:

col1  col2 col3
2019-08-26 13:00:00    a     1    Y
2019-08-26 13:30:00    b     2    Y
2019-08-26 14:00:00    c     3    Y
2019-08-26 14:30:00    d     4    Y
2019-08-26 15:00:00    e     5    Y

额外补充:处理缺失日期的情况

如果df1中存在df2没有对应日期的行,map会返回NaN。如果你想给这些缺失值设置默认值,可以这样处理:

df1['col3'] = df1.index.normalize().map(df2['col3']).fillna('默认值')

内容的提问来源于stack exchange,提问作者Vasilis Iak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 08:27:38