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

如何在Pandas中纵向堆叠DataFrame并忽略重复时间戳行?

Pandas多DataFrame堆叠并去重时间戳的实现方法

要实现将多个DataFrame纵向堆叠且仅保留每个时间戳的首次出现行,可以通过pd.concat结合drop_duplicates快速完成,具体步骤如下:

完整代码示例

import pandas as pd

# 创建测试用时间序列
last_10 = pd.datetime.now().replace(microsecond=0) - pd.Timedelta('10H')
dates = pd.date_range(last_10, periods=10, freq='H')

N = 5
df1 = pd.DataFrame({'y': range(1, N + 1),'time': dates[0:N]})
df2 = pd.DataFrame({'y': range(1, N + 1),'time': dates[2:2+N]})
df3 = pd.DataFrame({'y': range(1, N + 1),'time': dates[5:5+N]})

# 核心合并逻辑
merged_df = (pd.concat([df1, df2, df3])
             .drop_duplicates(subset='time', keep='first')  # 按time列去重,保留首次出现的行
             .sort_values('time')  # 按时间排序(可选,让结果更直观)
             .reset_index(drop=True))  # 重置索引

print(merged_df)

关键步骤说明

  • 纵向堆叠:pd.concat([df1, df2, df3])将三个DataFrame合并为一个包含所有行的临时DataFrame,包括重复时间戳的行。
  • 去重处理:drop_duplicates(subset='time', keep='first')指定以time列为判断重复的依据,保留每个时间戳第一次出现的行,后续重复行直接丢弃,完全符合"存在则跳过"的需求。
  • 可选优化:sort_values('time')确保结果按时间顺序排列;reset_index(drop=True)清除原索引,生成连续的新索引。

补充说明

如果需要保留每个时间戳最后出现的行,只需将keep='first'改为keep='last'即可。另外,在Pandas 2.0及以上版本中,推荐使用pd.Timestamp.now()替代pd.datetime.now(),避免版本兼容警告。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:31:03