如何使用Python Pandas通过循环将DataFrame整理为指定格式
处理非结构化DataFrame的格式转换
针对你描述的需求,这里提供直接可运行的Python代码来完成格式转换,步骤清晰且适配你的数据结构:
1. 准备工作与数据模拟
首先导入依赖库,并构造和你描述一致的简化版原始DataFrame(方便你对照测试):
import pandas as pd import numpy as np # 模拟原始DataFrame:24行、4列,每行交替存储2个标识和对应数值,分3组每组8行 label_list = ['TDY', 'TOM', 'DAY3', 'DAY4', 'DAY5', 'DAY6', 'DAY7', 'DAY8', 'TDY_N', 'TOM_N', 'DAY3_N', 'DAY4_N', 'DAY5_N', 'DAY6_N', 'DAY7_N', 'DAY8_N'] raw_data = [] for group_idx in range(3): for row_idx in range(8): # 每行生成两个标识-数值对(数值用组号区分,方便验证) current_row = [ label_list[2*row_idx], group_idx*100 + (2*row_idx + 1), label_list[2*row_idx+1], group_idx*100 + (2*row_idx + 2) ] raw_data.append(current_row) # 生成原始DataFrame df_raw = pd.DataFrame(raw_data, columns=[0, 36, 43, 79])
2. 核心转换逻辑
通过分组+逐行提取的方式,把每组8行数据整合成一行:
# 将24行按每8行一组拆分 grouped = df_raw.groupby(np.arange(len(df_raw)) // 8) # 遍历每个分组,整理成目标格式的行数据 result_rows = [] for _, group_df in grouped: row_dict = {} # 提取每组内每行的标识和对应数值 for _, row in group_df.iterrows(): # 每行的第0列是标识,第36列是对应数值;第43列是标识,第79列是对应数值 row_dict[row[0]] = row[36] row_dict[row[43]] = row[79] result_rows.append(row_dict) # 转换为最终的目标DataFrame df_final = pd.DataFrame(result_rows)
关键逻辑说明
np.arange(len(df_raw)) // 8:生成分组标记,自动将24行划分为3组(每组8行),无需手动指定分组规则。- 逐行提取标识与数值:利用字典存储每组的所有标识-数值映射,确保最终每行包含16个标识对应的数值。
- 最终转换:将字典列表直接转为DataFrame,自动以标识作为列名,每组对应一行。
内容的提问来源于stack exchange,提问作者user20169630
相关产品推荐
相关产品推荐

