如何在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
相关产品推荐
相关产品推荐

