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

如何使用Pandas合并两列并按最近非空值填充后续行?

合并DataFrame列并延续最近非空值的解决方案

问题场景

需要将DataFrame中的GearUp和GearDn两列合并为Gear列,要求Gear列保留最近的非空有效值(如第2行的DOWN会延续到3、4行;第5行的UP延续到6、7行)。原始数据如下:

TimeGearUpGearDn
1NaNNaN
2NaNDOWN
3NaNNaN
4NaNNaN
5UPNaN
6NaNNaN
7NaNNaN

期望输出结果:

TimeGear
1NaN
2DOWN
3DOWN
4DOWN
5UP
6UP
7UP

若直接使用两次where方法处理,会出现第二次调用覆盖第一次数据的问题,以下是正确实现方案:

实现代码

import pandas as pd
import numpy as np

# 构造原始数据
df = pd.DataFrame({
    'Time': [1, 2, 3, 4, 5, 6, 7],
    'GearUp': [np.nan, np.nan, np.nan, np.nan, 'UP', np.nan, np.nan],
    'GearDn': [np.nan, 'DOWN', np.nan, np.nan, np.nan, np.nan, np.nan]
})

# 第一步:合并GearUp和GearDn列,提取每行的非空有效值
df['Gear'] = df['GearUp'].combine_first(df['GearDn'])

# 第二步:向前填充最近的非空值,实现有效值延续
df['Gear'] = df['Gear'].ffill()

# 保留目标列并输出
result = df[['Time', 'Gear']]
print(result)

代码说明

  1. combine_first方法:优先取GearUp的非空值,当GearUp为空时,取GearDn的非空值,完美提取出每行的有效Gear状态,避免了多次where调用导致的覆盖问题。
  2. ffill()方法:将后续的空值替换为前面最近的非空值,实现有效值的向下延续,满足需求中“保留最近非空有效值”的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 04:03:04