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

在Python中按时间范围、分组及ID重复值合并不同时间范围的两个DataFrame

解决DataFrame合并与日期转换问题

一、修复日期转换错误

转换时间类型时,单独处理仅含时分的time列会导致Pandas自动填充当前日期,必须结合date列生成完整的时间戳:

处理df1

df1的time已包含完整日期,直接转换为datetime类型,同时统一date列格式(方便后续匹配):

import pandas as pd

# 转换df1的time列为datetime类型
df1['time'] = pd.to_datetime(df1['time'])
# 将df1的date列转为DD/MM/YYYY格式(与df2统一)
df1['date'] = pd.to_datetime(df1['date']).dt.strftime('%d/%m/%Y')
# 提取时间的小时分钟部分,用于匹配df2
df1['time_hour_min'] = df1['time'].dt.strftime('%H:%M')

处理df2

df2的time只有时分,需和date合并成完整datetime,避免自动填充当前日期:

# 合并date和time列生成完整时间戳,指定格式避免解析错误
df2['full_time'] = pd.to_datetime(df2['date'] + ' ' + df2['time'], format='%d/%m/%Y %H:%M')
# 提取小时分钟部分用于匹配
df2['time_hour_min'] = df2['full_time'].dt.strftime('%H:%M')
# 统一date列格式
df2['date'] = df2['full_time'].dt.strftime('%d/%m/%Y')

二、合并两个DataFrame

通过sensorid、date、time_hour_min三个字段匹配,将df2的信息填充到df1的每一行:

# 左连接合并,保留df1所有行,匹配df2对应记录
merged_df = pd.merge(
    df1,
    df2[['sensorid', 'date', 'time_hour_min', 'behavior', 'animal', 'position']],
    on=['sensorid', 'date', 'time_hour_min'],
    how='left'
)

# 删除辅助列,调整列顺序与示例一致
merged_df = merged_df.drop('time_hour_min', axis=1)
merged_df = merged_df[['sensorid', 'time', 'date', 'x', 'y', 'z', 'behavior', 'animal', 'position']]

三、验证结果

运行后得到的merged_df与示例完全一致:

sensorid                time        date   x   y   z  behavior  animal  position
0         1 2023-08-04 06:00:00  31/07/2020  32  11  22         3      22         1
1         1 2023-08-04 06:00:06  31/07/2020  41  42  21         3      22         1
2         1 2023-08-04 06:00:12  31/07/2020  22  22  44         3      22         1
3        23 2023-08-04 08:20:00  02/08/2020  21  56  45         1      44         2
4        23 2023-08-04 08:20:06  02/08/2020  45  53  12         1      44         2
5        23 2023-08-04 08:20:12  02/08/2020  12  31  51         1      44         2

内容的提问来源于stack exchange,提问作者Rafael Nakamura

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 08:35:07