如何基于日期将日级DataFrame数据合并到分钟级DataFrame中?
当然有办法啦!这在时间序列数据处理里是很常见的需求,用Pandas就能轻松搞定。核心思路是把分钟数据的时间戳提取出日期部分,然后和日数据的日期列做匹配合并。下面我给你一步步拆解具体操作:
步骤1:确保时间/日期列是datetime类型
首先得保证你的时间列是Pandas的datetime格式,不然没法准确提取日期。如果原本是字符串格式,先做转换:
# 转换df_1的分钟时间戳为datetime类型 df_1['timestamp'] = pd.to_datetime(df_1['timestamp']) # 转换df_2的日期列为datetime类型(如果原本是字符串) df_2['date'] = pd.to_datetime(df_2['date'])
步骤2:提取分钟数据的纯日期
从df_1的时间戳里剥离出日期部分,生成一个临时列用来和df_2匹配:
df_1['date'] = df_1['timestamp'].dt.date # 把df_2的日期列也转成date类型,保证两边匹配键格式一致 df_2['date'] = df_2['date'].dt.date
步骤3:按日期合并两个DataFrame
用pd.merge()做左连接(how='left'),这样能保留所有分钟数据,同时自动匹配对应日期的日数据:
merged_df = pd.merge(df_1, df_2, on='date', how='left')
进阶技巧:不用额外生成日期列
如果你不想新增列,也可以直接把提取日期的操作作为合并键,一步到位:
merged_df = pd.merge( df_1, df_2, left_on=df_1['timestamp'].dt.date, right_on=df_2['date'].dt.date, how='left' ) # 清理自动生成的冗余列并重命名 merged_df = merged_df.drop(columns=['key_0', 'date_y']) merged_df = merged_df.rename(columns={'date_x': 'date'})
示例效果展示
假设你的df_1是分钟数据:
| timestamp | value_min |
|---|---|
| 2023-10-01 00:00:00 | 10 |
| 2023-10-01 00:01:00 | 12 |
| 2023-10-02 00:00:00 | 15 |
df_2是日数据:
| date | value_day |
|---|---|
| 2023-10-01 | 100 |
| 2023-10-02 | 200 |
合并后会得到:
| timestamp | value_min | date | value_day |
|---|---|---|---|
| 2023-10-01 00:00:00 | 10 | 2023-10-01 | 100 |
| 2023-10-01 00:01:00 | 12 | 2023-10-01 | 100 |
| 2023-10-02 00:00:00 | 15 | 2023-10-02 | 200 |
注意事项
- 如果数据带有时区信息,一定要先统一时区再提取日期,避免时区差导致日期匹配错误。
- 如果df_2存在缺失的日期,合并后对应分钟行的日数据会显示为
NaN,你可以用fillna()填充缺失值(比如0、前一天数据等)。
内容的提问来源于stack exchange,提问作者mitchute
相关产品推荐
相关产品推荐

