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

如何用Pandas无循环按'^'将行内数据拆分至列?

使用Pandas无循环拆分内容至不同列

需求说明

需在不使用循环的前提下,将包含字符^的行作为列名,后续行的内容分别归入对应列中,直至遇到下一个含^的行。

现有数据

0   A^
3   206-1C
4   502-2B
5   506-0.5C
6   604-1B
7   907-2B
8   G.ELITE^
9   A201-1C
10  A202-1B

期望输出

A^G.ELITE^
206-1CA201-1C
502-2BA202-1B
506-0.5C
604-1B
907-2B

(注:原期望输出中的末尾点号推测为笔误,此处按合理内容调整;若需保留点号,可在最终结果中追加处理)

已尝试代码

test=rd.query('texts.str.contains("\^")', engine='python')

解决方案

我们可以通过标记分组、填充列名、重塑表格的方式实现,全程无需循环:

  1. 标记每行所属的目标列:识别含^的行作为列名,并用向前填充的方式为后续行分配对应列名
  2. 过滤掉原列名行:移除那些仅作为列名的行
  3. 生成组内行索引:为每个列组内的行分配连续索引,用于后续重塑表格
  4. 重塑为目标格式:通过pivot方法将数据转换为列名对应、行内容匹配的表格

具体代码如下:

import pandas as pd

# 假设原始数据存储在名为rd的DataFrame中,列名为'texts'
# 标记每行对应的目标列名
rd['col_name'] = rd['texts'].where(rd['texts'].str.contains('\^')).ffill()
# 过滤掉作为列名的原始行
filtered_data = rd[~rd['texts'].str.contains('\^')].copy()
# 为每个列组内的行生成连续索引
filtered_data['row_index'] = filtered_data.groupby('col_name').cumcount()
# 重塑为目标表格格式
result_df = filtered_data.pivot(
    index='row_index',
    columns='col_name',
    values='texts'
).reset_index(drop=True)
# 清除列名的层级标签
result_df.columns.name = None

print(result_df)

若需要保留原期望输出中的末尾点号,可在最后追加以下处理:

result_df = result_df.apply(lambda col: col + '.' if col.notna().any() else col)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 06:05:09