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

Pandas列按空格数量处理:合并相邻单词及行复制需求

Pandas DataFrame文本拆分合并解决方案

原始数据

import pandas as pd
df = pd.DataFrame({'id':[1,2],'col1':['a b c','a b c d']})

期望输出

pd.DataFrame({'id':[1,1,2],'col1':['ab c', 'a bc','ab cd']})

处理规则

  • 列值仅包含1、2或3个空格
  • 当列值含2个空格(对应3个单词):复制该行,分别生成「word1word2 word3」和「word1 word2word3」两种格式
  • 当列值含3个空格(对应4个单词):转换为「word1word2 word3word4」格式

实现代码

1. 定义文本处理函数

先写一个处理单条文本的函数,根据单词数量判断处理逻辑:

def process_text(text):
    words = text.split()
    word_count = len(words)
    if word_count == 3:
        # 3个单词,生成两种合并格式
        return [f"{words[0]}{words[1]} {words[2]}", f"{words[0]} {words[1]}{words[2]}"]
    elif word_count == 4:
        # 4个单词,合并前两个、后两个单词
        return [f"{words[0]}{words[1]} {words[2]}{words[3]}"]
    else:
        # 2个单词(1个空格),返回原文本
        return [text]

2. 批量处理目标列

针对需要处理的30列,循环处理并生成最终结果:

# 替换为你实际需要处理的30列名称
cols_to_process = ['col1']

# 初始化结果DataFrame,先保留唯一id
final_df = df[['id']].drop_duplicates()

for col in cols_to_process:
    # 对每一行文本处理,生成展开后的(id, 处理后文本)列表
    expanded_rows = df.apply(
        lambda row: [(row['id'], processed_val) for processed_val in process_text(row[col])],
        axis=1
    )
    # 展开嵌套列表并转换为临时DataFrame
    temp_df = pd.DataFrame(
        [item for sublist in expanded_rows for item in sublist],
        columns=['id', col]
    )
    # 按id合并到最终结果
    final_df = final_df.merge(temp_df, on='id', how='right')

# 查看最终结果
print(final_df)

代码说明

  • process_text函数通过split()拆分单词,根据单词数量返回对应格式的文本列表
  • 循环处理每一列时,通过apply生成每行的多个结果,再将嵌套列表展开为单行记录
  • 最后通过merge按id合并所有列的处理结果,确保id与处理后文本一一对应

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 16:04:53