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

如何在Pandas中填充上下值一致的连续False单元格?

解决Pandas DataFrame中连续False值的条件替换问题

输入数据

import pandas as pd
df = pd.DataFrame({'City': ['Barcelona', 'Barcelona', False, False, False, 'Barcelona', 'Paris', False, 'London', False, 'London']})

期望输出

out = pd.DataFrame({'City': ['Barcelona', 'Barcelona', 'Barcelona', 'Barcelona', 'Barcelona', 'Barcelona', 'Paris', False, 'London', 'London', 'London']})

解决方案(高效向量化实现)

# 生成前向填充的有效城市列(每个位置取前面最近的非False城市)
prev_city = df['City'].where(df['City'] != False).ffill()
# 生成后向填充的有效城市列(每个位置取后面最近的非False城市)
next_city = df['City'].where(df['City'] != False).bfill()
# 标记需要替换的False位置:当前是False,且前后城市一致
replace_mask = (df['City'] == False) & (prev_city == next_city)
# 执行替换
df.loc[replace_mask, 'City'] = prev_city

步骤解释

  1. 前向/后向填充:ffill()和bfill()分别把每个False位置替换成它前后最近的有效城市名,快速获取每个False的"上下文"城市信息。
  2. 掩码筛选:通过逻辑运算精准定位需要替换的False——仅当前后城市完全相同时才替换,前后城市不同的False(比如Paris与London之间的)则保留原值。
  3. 批量替换:用loc直接对符合条件的位置赋值,比循环类方法效率更高,适配大数据量场景。

验证结果

执行代码后,df结果与期望输出完全一致:

City
0   Barcelona
1   Barcelona
2   Barcelona
3   Barcelona
4   Barcelona
5   Barcelona
6        Paris
7        False
8       London
9       London
10      London

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 14:42:23