如何按规则拆分单列特定值至新列?(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
相关产品推荐
相关产品推荐

