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

如何合并Python DataFrame中的对角日期数据?

问题描述

我是Python新手,若表述不清或暂未提供部分解决方案,敬请谅解。
我有如下DataFrame:包含Key、若干日期(分布在不同行),以及其他多列(同一Key对应的值相同)。

KeyDate 1Date 2Date 3Column XColumn Y
Key 12022-01-01X11111111Y11111111
Key 12022-01-02X11111111Y11111111
Key 12022-01-03X11111111Y11111111
Key 22022-12-01X22222222Y22222222
Key 22022-12-02X22222222Y22222222
Key 22022-12-03X22222222Y22222222

我希望将其聚合为如下形式:日期列补全对应值,其他列保持不变。

KeyDate 1Date 2Date 3Column XColumn Y
Key 12022-01-012022-01-022022-01-03X11111111Y11111111
Key 22022-12-012022-12-022022-12-03X22222222Y22222222

请问最高效的实现方法是什么?我尝试过常规的pivot和聚合操作,但未得到预期结果。

高效解决方案

直接使用groupby结合first()(或max()/min())就能完成需求,适配你的数据特征:

  • 同一Key下,每个日期列仅存在一个非空值,聚合时会提取到该唯一有效日期
  • 其他列的数值在同一Key下完全重复,聚合后会保留该值

代码示例

import pandas as pd

# 构造示例数据
data = {
    'Key': ['Key 1', 'Key 1', 'Key 1', 'Key 2', 'Key 2', 'Key 2'],
    'Date 1': ['2022-01-01', '', '', '2022-12-01', '', ''],
    'Date 2': ['', '2022-01-02', '', '', '2022-12-02', ''],
    'Date 3': ['', '', '2022-01-03', '', '', '2022-12-03'],
    'Column X': ['X11111111']*3 + ['X22222222']*3,
    'Column Y': ['Y11111111']*3 + ['Y22222222']*3
}

df = pd.DataFrame(data)
# 将空字符串转为pandas缺失值,确保聚合函数正确识别
df = df.replace('', pd.NA)

# 按Key分组聚合,保留原列结构
result = df.groupby('Key', as_index=False).first()

print(result)

关键步骤说明

  • replace('', pd.NA):把原始数据中的空字符串转为标准缺失值,避免聚合时误将空字符串当作有效值
  • groupby('Key', as_index=False):按Key分组,同时保持Key作为普通列,不转为索引
  • .first():提取每组中各列的第一个非空值,正好匹配日期列的唯一有效值,以及其他列的重复值

这个方法的时间复杂度为O(n),是pandas中处理此类聚合需求的高效方式,比pivot更贴合你的数据场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:55:25