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

Pandas:将含多标识符的DataFrame转换为规整格式

Pandas DataFrame 格式转换解决方案

问题描述

现有结构特殊的Pandas DataFrame:Site列与多组Identifier列共存,每组Identifier对应的天数列数量不固定,需将其转换为每行对应一个「Site+Identifier」组合的规整格式。

示例输入DataFrame

import pandas as pd

df = pd.DataFrame({
    'Unnamed: 0': ['Site',"A", "B","C"],
    'Unnamed: 1': ['Identifier 1',"Land", "Land","Land"],
    'Unnamed: 2': ['Day 1',1, 2,3],
    'Unnamed: 3': ['Day 2',4, 5,6],
    'Unnamed: 4': ['Day 3',7, 8,9],
    'Unnamed: 5': ['Day 4',10, 11,12],
    'Unnamed: 6': ['Identifier 2',"Water", "Water","Water"],
    'Unnamed: 7': ['Day 1',13, 14,15],
    'Unnamed: 8': ['Day 2',16, 17,18],
    'Unnamed: 9': ['Day 3',19, 20,21],
    'Unnamed: 10': ['Day 4',22, 23,24],
})

解决思路与代码

核心逻辑是拆分每组Identifier对应的列,将其与Site列合并后再拼接所有结果:

# 提取站点列数据
site_col = df.iloc[1:, 0].reset_index(drop=True)

# 定位所有Identifier列的起始索引
identifier_col_indices = [i for i, val in enumerate(df.iloc[0]) if 'Identifier' in val]

result_list = []

for idx in identifier_col_indices:
    # 获取当前Identifier的名称
    identifier_name = df.iloc[0, idx]
    # 确定当前Identifier组的列范围(到下一个Identifier列或末尾)
    next_idx = identifier_col_indices[identifier_col_indices.index(idx)+1] if identifier_col_indices.index(idx) < len(identifier_col_indices)-1 else len(df.columns)
    # 提取当前组的所有列
    group_data = df.iloc[:, idx:next_idx]
    # 设置表头为第一行的值
    group_data.columns = group_data.iloc[0]
    # 移除表头行,保留数据行
    group_data = group_data.iloc[1:].reset_index(drop=True)
    # 插入Site列到最前面
    group_data.insert(0, 'Site', site_col)
    # 加入结果列表
    result_list.append(group_data)

# 拼接所有组的结果
final_df = pd.concat(result_list, ignore_index=True)

# 输出目标格式
print(final_df.to_csv(sep='\t', index=False))

最终输出

Site	Identifier 1	Day 1	Day 2	Day 3	Day 4
A	Land	1	4	7	10
B	Land	2	5	8	11
C	Land	3	6	9	12
A	Water	13	16	19	22
B	Water	14	17	20	23
C	Water	15	18	21	24

内容的提问来源于stack exchange,提问作者D P

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:30:48