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

如何用Python/Pandas合并去重多列时间序列并按日期索引?

问题描述

原始数据集结构如下:

date1     header1  date2     header2  date3     header3  ... 
11.12.23  100      11.12.23  90       08.12.23  95       ...
11.12.23  100      08.12.23  89       08.12.23  95       ...
08.12.23  95       08.12.23  89       07.12.23  93       ...

需求:对每个独立时间序列(如[date1, header1]、[date2, header2]等)去除重复值,再按日期合并所有时间序列,得到如下结构的结果:

date      header1  header2  header3  ... 
11.12.23  100      90       NA       ...
08.12.23  95       89       95       ...
07.12.23  NA       NA       93       ...     

注:已修正header3的值。

Python/Pandas实现步骤

以下是具体实现代码及说明:

1. 导入库并构造/读取数据

先导入pandas,然后读取或构造原始数据集:

import pandas as pd

# 示例:构造原始数据(实际场景可替换为pd.read_csv('your_file.csv'))
data = {
    'date1': ['11.12.23', '11.12.23', '08.12.23'],
    'header1': [100, 100, 95],
    'date2': ['11.12.23', '08.12.23', '08.12.23'],
    'header2': [90, 89, 89],
    'date3': ['08.12.23', '08.12.23', '07.12.23'],
    'header3': [95, 95, 93]
}
df = pd.DataFrame(data)

2. 拆分并处理每个时间序列

遍历每一组date-header列对,提取数据后去重:

series_dict = {}

# 按每两列一组遍历(date列和对应的header列)
for idx in range(0, len(df.columns), 2):
    date_col = df.columns[idx]
    header_col = df.columns[idx+1]
    
    # 提取当前组数据并去重(默认保留首次出现的记录)
    temp_df = df[[date_col, header_col]].drop_duplicates()
    # 将日期设为索引,重命名值列
    temp_df = temp_df.set_index(date_col).rename(columns={header_col: header_col})
    # 存入字典
    series_dict[header_col] = temp_df

3. 合并时间序列并整理结果

将所有处理后的时间序列按日期索引合并,再调整格式:

# 按索引合并,缺失值自动填充为NaN
final_df = pd.concat(series_dict.values(), axis=1)
# 重置索引,将日期转为普通列
final_df = final_df.reset_index().rename(columns={'index': 'date'})

# 可选:按日期降序排序(需先转换日期格式)
final_df['date'] = pd.to_datetime(final_df['date'], format='%d.%m.%y')
final_df = final_df.sort_values('date', ascending=False).reset_index(drop=True)
# 转回原日期字符串格式
final_df['date'] = final_df['date'].dt.strftime('%d.%m.%y')

4. 查看结果

运行print(final_df)会得到目标格式的数据:

date  header1  header2  header3
0  11.12.23    100.0     90.0      NaN
1  08.12.23     95.0     89.0     95.0
2  07.12.23      NaN      NaN     93.0

补充说明

  • 若需要保留重复值中的最后一条记录,可在drop_duplicates()中添加参数keep='last'
  • 日期排序步骤为可选操作,若不需要排序可跳过
  • 若原始日期格式不同,调整pd.to_datetime()中的format参数即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 07:14:58