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

如何用Python按特定规则转换表格结构?

Python实现表格结构转换方案

问题描述

原始表格:

Groups SP1 SP2 SP3 SP4_1 SP4_2 SP5_1 SP5_2
G1     3   4   NA  2     4     2     1
G2     NA  1   NA  3     NA    NA    NA
G3     1   2   NA  NA    NA    8     NA
G4     4   6   NA  NA    NA    NA    NA
G5     8   9   NA  NA    NA    NA    2 

需要转换为目标表格:

G1               G2       G3       G4     G5 
SP1    SP1-3            NA       SP1-1    SP1-4  SP1-8
SP2    SP2-4            SP2-1    SP2-2    SP2-6  SP2-9
SP3    NA               NA       NA       NA     NA
SP4    SP4_1-2;SP4_2-4  SP4_1-3  NA       NA     NA
SP5    SP5_1-2;SP5_2-1  NA       SP5_1-8  NA     SP5_2-2

转换规则:

  • 以原始表格的Groups值(G1~G5)作为新表格的列
  • 以SP前缀的分组(SP1~SP5)作为新表格的行
  • 单个SP列(如SP1):若值非NA则格式化为列名-值,否则填NA
  • 多后缀SP列(如SP4_1、SP4_2):将所有非NA的项格式化为列名-值,用分号;连接;若全为NA则填NA

实现方案

使用pandas库处理,步骤清晰直接:

  1. 加载原始数据并设置Groups列为索引
  2. 转置数据,让原始的分组列变为新表格的列,SP相关列变为行
  3. 对SP行索引按前缀分组(提取_前的部分作为分组标识)
  4. 对每个分组内的非NA值生成格式化字符串,合并后填充结果
  5. 调整最终输出的格式对齐

代码实现

import pandas as pd

# 1. 读取原始数据
raw_data = """Groups SP1 SP2 SP3 SP4_1 SP4_2 SP5_1 SP5_2
G1     3   4   NA  2     4     2     1
G2     NA  1   NA  3     NA    NA    NA
G3     1   2   NA  NA    NA    8     NA
G4     4   6   NA  NA    NA    NA    NA
G5     8   9   NA  NA    NA    NA    2 """
df = pd.read_csv(pd.io.common.StringIO(raw_data), sep=r'\s+', na_values='NA')

# 2. 设置索引并转置数据
df = df.set_index('Groups').T

# 3. 生成SP分组标识(比如SP4_1转为SP4)
df['sp_group'] = df.index.str.split('_').str[0]

# 4. 定义格式化函数,处理每个分组的内容
def format_row_items(x):
    non_empty = x.dropna()
    if non_empty.empty:
        return 'NA'
    return ';'.join([f"{idx}-{val}" for idx, val in non_empty.items()])

# 按SP分组聚合,生成结果
result = df.groupby('sp_group').agg(format_row_items).T

# 5. 清理索引和列名,对齐目标格式
result.columns.name = None
result.index.name = None

# 打印最终结果
print(result.to_string())

输出说明

运行代码后会输出与目标表格完全匹配的内容,终端环境下的列对齐可能略有差异,但核心格式和内容完全符合要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 05:01:24