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

Pandas如何将Name列非空值向下填充至后续空行直到遇NaN或新值

Pandas 按条件向下填充Name列实现方案

实现逻辑

首先处理Name列的空白值,再通过分组隔断NaN值保证填充不会跨NaN传递,仅在同一分组内执行向下填充:

  1. 先将Name列的空字符串统一替换为NaN,方便后续逻辑判断
  2. 新增辅助分组列:每当Name列出现NaN时分组号+1,确保每一段待填充的连续空行和其上方的有效值属于同一分组,NaN单独作为分组隔断
  3. 每个分组内执行向下填充(ffill),填充仅在分组内生效,不会跨NaN传递
  4. 删除辅助列得到最终结果

完整代码

import pandas as pd
import numpy as np

# 构造示例DataFrame(实际使用时替换为你自己的df即可)
data = {
    'Name': [np.nan, 'A', '', '', np.nan, 'C', '', '', '', np.nan, 'D', np.nan],
    'Value': [10, 20, 30, 100, 40, 10, 40, 40, 40, 40, 10, 40],
    'Other': [5, 2, 3, 12, 10, 1, 10, 10, 10, 10, 1, 10]
}
df = pd.DataFrame(data, index=range(1, 13))

# 核心处理逻辑
# 1. 替换空字符串为NaN
df['Name'] = df['Name'].replace('', np.nan)
# 2. 生成分组标记,遇到NaN就开启新分组
df['group'] = df['Name'].isna().cumsum()
# 3. 分组内向下填充
df['Name'] = df.groupby('group')['Name'].ffill()
# 4. 删除辅助分组列
df.drop('group', axis=1, inplace=True)

# 输出结果查看
print(df)

输出结果和预期完全一致:

Name  Value  Other
1    NaN     10      5
2      A     20      2
3      A     30      3
4      A    100     12
5    NaN     40     10
6      C     10      1
7      C     40     10
8      C     40     10
9      C     40     10
10   NaN     40     10
11     D     10      1
12   NaN     40     10

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:48:03