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

合并DataFrame中多个Timestamp列至单列并匹配对应数值

问题描述

我有一个包含70个以_Timestamp结尾的列的DataFrame,同时包含对应的数值列(例如A_Timestamp对应B_Values、BC_Timestamp对应C_Values等)。示例数据结构如下:

原始数据示例

  1. 含A_Timestamp与B_Values的子集:
A_TimestampB_Values
2020-11-08 11:15:001
2020-11-10 15:34:002
  1. 含BC_Timestamp与C_Values的子集:
BC_TimestampC_Values
2020-11-11 12:13:008
2020-11-15 02:47:004
  1. 含DA_Timestamp与D_Values的子集:
DA_TimestampD_Values
2020-1-13 14:47:003
2020-11-9 5:34:005
  1. 含CA_Timestamp与Q_Values的子集:
CA_TimestampQ_Values
2020-7-18 01:04:007
2020-04-10 16:34:006

期望输出

需要将所有_Timestamp列合并为单个Timestamp列,每个时间戳对应填充其关联的数值列,其余数值列填充NaN,最终格式如下:

TimestampB_ValuesC_ValuesD_ValuesQ_Values
2020-11-08 11:15:001NaNNaNNaN
2020-11-10 15:34:002NaNNaNNaN
2020-11-11 12:13:00NaN8NaNNaN
2020-11-15 02:47:00NaN4NaNNaN
2020-1-13 14:47:00NaNNaN3NaN
2020-11-9 05:34:00NaNNaN5NaN
2020-7-18 01:04:00NaNNaNNaN7
2020-04-10 16:34:00NaNNaNNaN6
解决方案

可以通过以下步骤实现需求,代码支持扩展到70组Timestamp-数值列的场景:

import pandas as pd

# 1. 构造原始DataFrame(实际使用时替换为你的真实数据)
df = pd.DataFrame({
    'A_Timestamp': ['2020-11-08 11:15:00', '2020-11-10 15:34:00', None, None, None, None, None, None],
    'BC_Timestamp': [None, None, '2020-11-11 12:13:00', '2020-11-15 02:47:00', None, None, None, None],
    'DA_Timestamp': [None, None, None, None, '2020-1-13 14:47:00', '2020-11-9 5:34:00', None, None],
    'CA_Timestamp': [None, None, None, None, None, None, '2020-7-18 01:04:00', '2020-04-10 16:34:00'],
    'B_Values': [1, 2, None, None, None, None, None, None],
    'C_Values': [None, None, 8, 4, None, None, None, None],
    'D_Values': [None, None, None, None, 3, 5, None, None],
    'Q_Values': [None, None, None, None, None, None, 7, 6]
})

# 2. 定义Timestamp列与对应数值列的映射(70组的话可以批量生成,比如通过列名前缀匹配)
# 示例映射,实际可根据你的列名规则自动生成
timestamp_value_map = {
    'A_Timestamp': 'B_Values',
    'BC_Timestamp': 'C_Values',
    'DA_Timestamp': 'D_Values',
    'CA_Timestamp': 'Q_Values'
}

# 3. 遍历映射,生成每个Timestamp-数值列的临时DataFrame
temp_dfs = []
for ts_col, val_col in timestamp_value_map.items():
    # 过滤掉Timestamp为空的行,重命名Timestamp列为统一名称
    subset = df[[ts_col, val_col]].dropna(subset=[ts_col])
    subset.rename(columns={ts_col: 'Timestamp'}, inplace=True)
    temp_dfs.append(subset)

# 4. 合并所有临时DataFrame,填充缺失的数值列为NaN
result = pd.concat(temp_dfs, ignore_index=True)
# 确保所有数值列都存在于结果中
all_value_cols = list(timestamp_value_map.values())
for col in all_value_cols:
    if col not in result.columns:
        result[col] = pd.NA

# 5. 可选:将Timestamp转为datetime类型并排序
result['Timestamp'] = pd.to_datetime(result['Timestamp'])
result = result.sort_values('Timestamp').reset_index(drop=True)

print(result)

代码说明

  • 批量映射生成:如果你的70组列有统一命名规则(比如X_Timestamp对应X_Values),可以用代码自动生成映射,无需手动输入:
    timestamp_cols = [col for col in df.columns if col.endswith('_Timestamp')]
    # 根据实际列名规则调整映射逻辑
    timestamp_value_map = {col: col.replace('_Timestamp', '_Values') for col in timestamp_cols}
    
  • 合并逻辑:通过拆分每个Timestamp-数值列对,过滤空值后合并,确保每个时间戳只对应其关联的数值,其余自动填充NaN。
  • 排序处理:将Timestamp转为datetime类型后排序,让结果更规整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 12:10:50