Pandas如何将Name列非空值向下填充至后续空行直到遇NaN或新值
Pandas 按条件向下填充Name列实现方案
实现逻辑
首先处理Name列的空白值,再通过分组隔断NaN值保证填充不会跨NaN传递,仅在同一分组内执行向下填充:
- 先将Name列的空字符串统一替换为NaN,方便后续逻辑判断
- 新增辅助分组列:每当Name列出现NaN时分组号+1,确保每一段待填充的连续空行和其上方的有效值属于同一分组,NaN单独作为分组隔断
- 每个分组内执行向下填充(ffill),填充仅在分组内生效,不会跨NaN传递
- 删除辅助列得到最终结果
完整代码
import pandas as pd import numpy as np # 构造示例DataFrame(实际使用时替换为你自己的df即可) data = { 'Name': [np.nan, 'A', '', '', np.nan, 'C', '', '', '', np.nan, 'D', np.nan], 'Value': [10, 20, 30, 100, 40, 10, 40, 40, 40, 40, 10, 40], 'Other': [5, 2, 3, 12, 10, 1, 10, 10, 10, 10, 1, 10] } df = pd.DataFrame(data, index=range(1, 13)) # 核心处理逻辑 # 1. 替换空字符串为NaN df['Name'] = df['Name'].replace('', np.nan) # 2. 生成分组标记,遇到NaN就开启新分组 df['group'] = df['Name'].isna().cumsum() # 3. 分组内向下填充 df['Name'] = df.groupby('group')['Name'].ffill() # 4. 删除辅助分组列 df.drop('group', axis=1, inplace=True) # 输出结果查看 print(df)
输出结果和预期完全一致:
Name Value Other 1 NaN 10 5 2 A 20 2 3 A 30 3 4 A 100 12 5 NaN 40 10 6 C 10 1 7 C 40 10 8 C 40 10 9 C 40 10 10 NaN 40 10 11 D 10 1 12 NaN 40 10
内容的提问来源于stack exchange,提问作者Niewasz Biznes
相关产品推荐
相关产品推荐

