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

如何在Pandas DataFrame中创建Break列并在Break行间向前填充

Pandas 生成并按规则向前填充新列Break

原始数据

原始的DataFrame结构如下(CSV格式):

Type,Name
Parent,Parent1
Break,break010
Op,Op1
Unit,Unit1
Item,Item1
Break,break020
Op,Op2
Unit,Unit2
Break,break030
Op,Op3
Unit,Unit3
Parent,Parent2
Break,break010

需求说明

新增一列Break,规则如下:

  • 当Type为Break时,该列值等于对应行的Name
  • 非Break且非Parent的行,向前填充最近的Break值
  • Parent行的Break列留空

实现代码

import pandas as pd

# 构造或读取数据
data = """Type,Name
Parent,Parent1
Break,break010
Op,Op1
Unit,Unit1
Item,Item1
Break,break020
Op,Op2
Unit,Unit2
Break,break030
Op,Op3
Unit,Unit3
Parent,Parent2
Break,break010"""
df = pd.read_csv(pd.compat.StringIO(data))

# 初始化Break列:仅Break行赋值,其余为NaN
df['Break'] = df['Name'].where(df['Type'] == 'Break')

# 按Parent分组,确保每个Parent区块内独立填充
df['group'] = (df['Type'] == 'Parent').cumsum()
df['Break'] = df.groupby('group')['Break'].ffill()

# 移除临时分组列,将NaN替换为空字符串(可选)
df = df.drop(columns='group')
df['Break'] = df['Break'].fillna('')

# 打印结果
print(df.to_string(index=False))

最终输出结果

Type       Name      Break
Parent    Parent1           
 Break   break010   break010
    Op        Op1   break010
  Unit      Unit1   break010
  Item      Item1   break010
 Break   break020   break020
    Op        Op2   break020
  Unit      Unit2   break020
 Break   break030   break030
    Op        Op3   break030
  Unit      Unit3   break030
Parent    Parent2           
 Break   break010   break010

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:15:19