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

Pandas如何将DataFrame仅合并到重复时间戳索引的指定行

解决方案

要实现仅将时长数据合并到对应重复索引的idle状态行,其余行保留NaN,可以通过左连接+状态过滤的方式快速实现,以下是具体步骤和代码示例:

假设你的两个DataFrame分别为:

  • df_status:以时间戳为索引,包含status列(值为finish或idle),存在重复索引
  • df_duration:以时间戳为索引,包含duration列(存储时长数据)

方法一:左连接后按状态过滤(推荐)

先通过索引左连接两个DataFrame,再将非idle状态行的时长列置空:

import pandas as pd

# 按索引左连接,保留df_status的所有行
merged_df = df_status.join(df_duration, how='left')
# 将非idle状态的duration设为NaN
merged_df.loc[merged_df['status'] != 'idle', 'duration'] = pd.NA

这种方法直接高效,不需要拆分数据,仅需两步即可完成需求,且能完整保留原DataFrame的所有行和索引结构。

方法二:拆分合并(适合复杂场景)

如果需要更精细化的控制,可以先拆分df_status为idle和非idle两部分,仅给idle部分合并时长后再拼接回去:

# 拆分状态数据
idle_rows = df_status[df_status['status'] == 'idle']
non_idle_rows = df_status[df_status['status'] != 'idle']

# 仅给idle行合并时长
idle_rows = idle_rows.join(df_duration)
# 合并回原结构并保持索引顺序
merged_df = pd.concat([non_idle_rows, idle_rows]).sort_index()

关键说明

  • 两种方法都不会修改原DataFrame的索引结构,所有重复索引行都会被保留
  • 使用pd.NA而非np.nan是为了适配Pandas的 nullable 数据类型,若使用旧版本Pandas也可替换为np.nan

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 06:30:11