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

如何按规则拆分单列特定值至新列?(shift()适用性咨询)

解决按特征拆分文本列到多列的问题

没问题,我来帮你解决这个问题!看起来你的数据是按「数值→带单引号的值→整数」的规律每3个元素一组排列的,我们可以用Pandas轻松实现需求,这里提供两种实用方法:

方法一:基于固定分组(高效且适合规律排列的数据)

如果你的原始数据严格按照x→y→sequence的顺序逐行排列,直接通过数组重塑就能快速得到目标结果:

import pandas as pd
import numpy as np

# 模拟你的原始数据(X列为文本类型,每行一个值)
raw_data = {'X': ['76.25', "'87.12'", '1', '345.65', "'96.45'", '2', '78.12', "'85.23'", '3', '35.1', "'65.21'", '1']}
df = pd.DataFrame(raw_data)

# 将X列的数值按每3个一组重塑为新的DataFrame
result_df = pd.DataFrame(
    np.array(df['X']).reshape(-1, 3),
    columns=['x', 'y', 'sequence']
)

print(result_df)

输出结果就是你期望的格式:

x         y sequence
0   76.25  '87.12'        1
1  345.65  '96.45'        2
2   78.12  '85.23'        3
3    35.1  '65.21'        1

方法二:基于值的特征判断(灵活适配顺序变动的情况)

如果数据分组内的顺序可能不固定,我们可以通过判断每个值的特征来分配到对应列:

import pandas as pd

# 模拟原始数据
raw_data = {'X': ['76.25', "'87.12'", '1', '345.65', "'96.45'", '2', '78.12', "'85.23'", '3', '35.1', "'65.21'", '1']}
df = pd.DataFrame(raw_data)

# 根据特征标记各列的值
df['x'] = df['X'].where(~df['X'].str.startswith("'") & ~df['X'].str.isdigit())
df['y'] = df['X'].where(df['X'].str.startswith("'"))
df['sequence'] = df['X'].where(df['X'].str.isdigit())

# 按每3行一组聚合,提取每组的有效值
df['group_id'] = df.index // 3
result_df = df.groupby('group_id').agg({
    'x': 'first',
    'y': 'first',
    'sequence': 'first'
}).reset_index(drop=True)

print(result_df)

关于你提到的shift()方法

shift()主要用于整列的行偏移,但你的需求是按值的特征拆分,而不是固定位置偏移,所以shift()并不适用上面的场景,用上面的分组或特征判断方法会更直接可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 08:42:46