如何从宽幅Pandas DataFrame提取每6列并转为纵向目标表
宽表转纵向表的实现方法
直接用Pandas的切片、重命名和合并操作就能搞定,步骤如下:
- 先准备好目标列名,用列表临时存储每组处理后的数据(避免循环中反复合并的性能损耗)
- 按每6列一组循环提取原数据,重命名列后加入临时列表
- 最后一次性合并所有组数据生成目标表
具体代码
import pandas as pd # 导入原数据,如果原CSV的表头无效需要跳过,记得加header=None df = pd.read_csv("groups.csv") # 定义目标表列名 target_columns = ['GroupA', 'GroupB', 'GroupC','GroupD', 'GroupE', 'GroupF'] # 计算总组数:606列刚好分成101组 total_groups = df.shape[1] // 6 # 初始化临时列表存储每组处理后的数据 temp_data_list = [] for i in range(total_groups): # 提取当前组的6列数据 current_group = df.iloc[:, i*6 : (i+1)*6] # 重命名为目标列名 current_group.columns = target_columns # 将当前组加入临时列表 temp_data_list.append(current_group) # 一次性合并所有组,生成最终纵向表 df_target = pd.concat(temp_data_list, ignore_index=True)
补充说明
- 如果你说的“跳过原表头”是指原CSV的第一行是无效表头,导入时要修改为
df = pd.read_csv("groups.csv", header=None),避免把表头误当作数据行处理。 - 用列表收集临时数据再合并,比循环中反复执行
pd.concat的效率高很多,尤其当原数据行数较多时更明显。
内容的提问来源于stack exchange,提问作者Behseini
相关产品推荐
相关产品推荐

