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()
代码说明
df['Colonne 1'].where(df['Dimension 1'] == 'Organisation'):仅保留Dimension 1为Organisation的行的Colonne 1值,其余行设为NaN.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
相关产品推荐
相关产品推荐

