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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:20:33