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

在Pandas中以NaN为分隔符合并同一列字符串

高效处理被NaN分隔的DataFrame行合并需求

嘿,这个场景我太熟悉了!用逐行函数处理虽然能解决,但数据量大的时候效率会很低,其实用pandas的分组聚合技巧就能轻松搞定,而且是向量化操作,速度快很多~

先给你还原下示例数据:

import pandas as pd
import numpy as np

# 构造你的示例DataFrame
df = pd.DataFrame({
    'A': ['the car is red', np.nan, 'the house is big', np.nan, 'the room is small']
})

核心解决思路

我们可以通过创建分组标签,把每个被NaN分隔的连续行归为同一个组,然后对每个组的内容进行合并:

  1. 生成分组键:利用isna()标记NaN行,再用cumsum()累加,这样每个连续的非NaN块会被分配同一个组编号
  2. 过滤+聚合:过滤掉NaN行后,按组合并每个块的内容,最终得到你要的新列

完整代码实现

# 步骤1:创建分组标签
df['group'] = df['A'].isna().cumsum()

# 步骤2:过滤非NaN行,按组合并内容,得到新列B
result_col = df[df['A'].notna()].groupby('group')['A'].agg(' '.join).reset_index(drop=True).rename('B')

# 打印结果
print(result_col)

运行后输出的结果就是你想要的:

0    the car is red
1    the house is big
2    the room is small
Name: B, dtype: object

扩展说明

如果你的NaN前有多行内容(比如连续几行非NaN后才出现NaN),这个方法依然适用:它会自动把同一个组里的所有行文本合并成一个字符串(默认用空格分隔,你也可以改成其他分隔符,比如'\n'.join实现换行合并)。

相比逐行处理的方式,这种分组聚合的方法完全利用了pandas的向量化运算优势,在处理大数据集时速度会快好几倍~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:23:00