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

如何用df_2的InitialDate和EndDate扩展df_1的id时间序列?

实现方案

以下是基于Pandas的可行实现步骤,确保保留时间的秒级粒度:

1. 确保日期字段为秒级datetime类型

先将两个DataFrame中的日期字段转换为datetime类型,明确保留秒级精度(如果原始数据格式固定,指定format参数可提升转换效率):

import pandas as pd

# 转换df_1的时间字段
df_1['TrackDateTime'] = pd.to_datetime(df_1['TrackDateTime'], format='%Y-%m-%d %H:%M:%S')
# 转换df_2的时间字段
df_2['InitialDate'] = pd.to_datetime(df_2['InitialDate'], format='%Y-%m-%d %H:%M:%S')
df_2['EndDate'] = pd.to_datetime(df_2['EndDate'], format='%Y-%m-%d %H:%M:%S')

2. 转换df_2为与df_1一致的结构

使用melt函数将df_2的InitialDate和EndDate列转为行记录,并对应设置IdOrder值:

# 重塑df_2,生成对应记录
df_2_transformed = df_2.melt(
    id_vars=['id'],
    value_vars=['InitialDate', 'EndDate'],
    var_name='DateType',
    value_name='TrackDateTime'
)

# 映射IdOrder值
df_2_transformed['IdOrder'] = df_2_transformed['DateType'].replace({
    'InitialDate': 0,
    'EndDate': -1
})

# 清理冗余列
df_2_transformed = df_2_transformed.drop(columns=['DateType'])

3. 合并数据并整理

将转换后的df_2数据与原df_1合并,可选按id和IdOrder排序以优化记录顺序:

# 合并两个DataFrame
final_df = pd.concat([df_1, df_2_transformed], ignore_index=True)

# 可选:按id分组,按IdOrder降序排列(让初始日期记录排在结束日期前)
final_df = final_df.sort_values(by=['id', 'IdOrder'], ascending=[True, False]).reset_index(drop=True)

可选:仅保留df_1中存在的id记录

如果不需要df_2中未出现在df_1的id数据,可在转换前先过滤:

# 过滤出df_1中存在的id
df_2_filtered = df_2[df_2['id'].isin(df_1['id'].unique())]
# 后续转换步骤使用df_2_filtered即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 19:25:41