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

Pandas中创建依赖相邻单元格的条件列求助

解决方法

需求回顾

现有如下DataFrame:

Colonne 1   Dimension 1
0  MTN_LI2      Indicator
1  MTN_IRU      Indicator
2  MTN_ACE      Indicator
3  MTN_IME      Indicator
4     RIPP7  Organisation
5    CA_SOT     Indicator
6    CA_OTI     Indicator
7     CNW00  Organisation
8     BSNTF  Organisation
9     RIPNJ  Organisation

需要新增一列,规则为:

  • 当Dimension 1等于Organisation时,新列取对应行的Colonne 1值
  • 当Dimension 1为Indicator时,新列取上一行的新列值(即填充最近的上方Organisation对应的Colonne 1值)

高效实现代码

直接使用Pandas的where结合ffill方法,这是向量化操作,性能远优于循环或下移行的方法:

import pandas as pd

# 构造示例DataFrame(可替换为你的实际数据)
data = {
    'Colonne 1': ['MTN_LI2', 'MTN_IRU', 'MTN_ACE', 'MTN_IME', 'RIPP7', 'CA_SOT', 'CA_OTI', 'CNW00', 'BSNTF', 'RIPNJ'],
    'Dimension 1': ['Indicator', 'Indicator', 'Indicator', 'Indicator', 'Organisation', 'Indicator', 'Indicator', 'Organisation', 'Organisation', 'Organisation']
}
df = pd.DataFrame(data)

# 创建新列
df['New_Column'] = df['Colonne 1'].where(df['Dimension 1'] == 'Organisation').ffill()

代码说明

  1. df['Colonne 1'].where(df['Dimension 1'] == 'Organisation'):仅保留Dimension 1为Organisation的行的Colonne 1值,其余行设为NaN
  2. .ffill():向前填充NaN值,自动用最近的上方非空值填充连续的Indicator行,完美解决连续多个非Organisation的场景

最终结果

执行后DataFrame会新增New_Column列,结果如下:

Colonne 1   Dimension 1 New_Column
0  MTN_LI2      Indicator        NaN
1  MTN_IRU      Indicator        NaN
2  MTN_ACE      Indicator        NaN
3  MTN_IME      Indicator        NaN
4     RIPP7  Organisation      RIPP7
5    CA_SOT     Indicator      RIPP7
6    CA_OTI     Indicator      RIPP7
7     CNW00  Organisation      CNW00
8     BSNTF  Organisation      BSNTF
9     RIPNJ  Organisation      RIPNJ

(注:开头的NaN是因为前四行没有上方的Organisation值,若需要默认值可在ffill()后添加.fillna(默认值)处理)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:52:05