如何将Pandas DataFrame中的N组列转换为行并拆分数据
拆分Pandas DataFrame单行数据的解决方案
可以使用Pandas内置的pd.wide_to_long()函数,它专门针对这种带重复前缀+后缀的宽表转长表场景设计,能完美适配你这种不确定地块数量的需求。
步骤1:构造示例数据
import pandas as pd data = { 'key':['k1', 'k2'], 'plot_name_1':['name', 'name'], 'plot_area_1':[1,2], 'plot_name_2':['name', 'name'], 'plot_area_2':[1,2], 'plot_name_n':['name', 'name'], 'plot_area_n':[1,2] } df = pd.DataFrame(data)
步骤2:宽表转长表
# 转换长表,suffix匹配任意字母/数字(适配1、2、n这类编号) df_long = pd.wide_to_long( df, stubnames=['plot_name', 'plot_area'], # 列名的前缀部分 i='key', # 作为分组标识的列 j='plot_number', # 从列名后缀提取的新列名 sep='_', # 前缀和后缀的分隔符 suffix=r'\w+' # 匹配后缀的正则,\w+表示任意字母/数字 ) # 重置索引,将plot_number从索引转为普通列 df_long = df_long.reset_index() # 调整列顺序,和目标结果对齐(可选) df_long = df_long[['key', 'plot_number', 'plot_name', 'plot_area']]
最终结果
运行后得到的df_long完全符合你的需求:
key plot_number plot_name plot_area 0 k1 1 name 1 1 k1 2 name 2 2 k1 n name 1 3 k2 1 name 2 4 k2 2 name 2 5 k2 n name 2
适配实际场景说明
如果你的实际地块编号是纯数字(比如1到8),可以把suffix参数改成r'\d+',这样只会匹配数字后缀,更精准。
内容的提问来源于stack exchange,提问作者Merlin
相关产品推荐
相关产品推荐

