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

如何按字符串标签拆分Pandas DataFrame并重构数据格式?

单列含标签与XY数据的拆分最优方案

问题场景

我有包含XY数据集与标签的合并数据,所有内容位于单列中。需要在字符串标签后拆分数据集,拆分数值数据并添加标签列,实现从以下输入格式转换为目标输出格式:

输入格式

import pandas as pd

df = pd.DataFrame.from_dict({'XYZ': 
['Monday', '120   12', '119    51', '133   85', '1414   268', 'Wednesday', '3   62', '4   27', 
'Friday', '23   100', '155   300', '123   400'], })

print(df)

目标输出格式

df2 = pd.DataFrame.from_dict(
        {
            'X': ['120', '119', '133', '1414', '3', '4', '23', '155', '123'],
            'Y': [ '12', '51', '85', '268', '62', '27', '100', '300', '400'],
            'z': [ 'Monday', 'Monday', 'Monday', 'Monday', 'Wednesday', 'Wednesday', 'Friday', 'Friday', 'Friday']
        }
    )
print(df2)

最优实现方法

用pandas矢量化操作完成,避免循环,效率高且代码简洁:

import pandas as pd

df = pd.DataFrame.from_dict({'XYZ': 
['Monday', '120   12', '119    51', '133   85', '1414   268', 'Wednesday', '3   62', '4   27', 
'Friday', '23   100', '155   300', '123   400'], })

# 1. 识别纯文本标签行,向下填充标签到后续数据行
df['z'] = df['XYZ'].where(df['XYZ'].str.match(r'^\D+$')).ffill()

# 2. 过滤掉原始标签行,仅保留含XY数值的行
df_numeric = df[~df['XYZ'].str.match(r'^\D+$')].copy()

# 3. 按任意数量空格拆分XY列,生成X、Y两列
df_numeric[['X', 'Y']] = df_numeric['XYZ'].str.split(r'\s+', expand=True)

# 4. 整理成目标格式,重置索引并保留需要的列
df2 = df_numeric[['X', 'Y', 'z']].reset_index(drop=True)

print(df2)

方法说明

  • 标签填充:通过正则^\D+$识别纯文本标签行,再用ffill()将标签向下填充到所属的所有数据行,确保每个数据行对应正确标签。
  • 行过滤:取反正则匹配结果,快速筛选出仅含数值的行。
  • XY拆分:str.split(r'\s+')适配数据中不规则的空格分隔情况,准确拆分X、Y值。
  • 性能优势:全程使用pandas矢量化操作,比循环遍历效率高,尤其适合大规模数据处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 05:35:17