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

如何使用tidyr::pivot_longer转置已知分组的大量非模式化列

批量转置无固定命名列的实现方法(基于Pandas)

核心思路

针对无固定命名的列分组,通过提取分组列+保留标识列+统一列名+合并结果的流程,实现按分组转置并保留ID/ID2的需求。


步骤1:准备示例数据与分组定义

先模拟你的输入数据和分组规则:

import pandas as pd

# 示例原始数据框
df = pd.DataFrame({
    'ID': [1, 2],
    'ID2': ['X', 'Y'],
    'A1': [10, 15],
    'A2': [20, 25],
    'B1': [30, 35],
    'B2': [40, 45],
    'C1': [50, 55],
    'C2': [60, 65]
})

# 列分组列表(每个子列表为一组需转置的列)
col_groups = [['A1', 'A2'], ['B1', 'B2'], ['C1', 'C2']]
# 可选:为每个分组命名(用于结果中标识分组来源)
group_names = ['A', 'B', 'C']

步骤2:处理分组并合并结果

循环遍历每个分组,提取标识列与分组列,添加分组标识后统一列名,最后拼接所有分组的结果:

# 初始化列表存储各分组的处理结果
result_dfs = []

for group_name, cols in zip(group_names, col_groups):
    # 提取当前分组的相关列:ID、ID2 + 分组内的列
    temp_df = df[['ID', 'ID2'] + cols].copy()
    # 添加分组名称列
    temp_df['Group'] = group_name
    # 统一分组列的命名(如Val1、Val2,适配分组内的列数)
    temp_df.columns = ['ID', 'ID2', 'Val1', 'Val2', 'Group']
    # 调整列顺序,将分组标识放在ID2后
    temp_df = temp_df[['ID', 'ID2', 'Group', 'Val1', 'Val2']]
    # 将当前分组结果加入列表
    result_dfs.append(temp_df)

# 拼接所有分组的结果,生成最终数据框
final_df = pd.concat(result_dfs, ignore_index=True)

步骤3:查看最终结果

运行代码后,final_df即为预期的转置结果:

ID ID2 Group  Val1  Val2
0   1   X     A    10    20
1   2   Y     A    15    25
2   1   X     B    30    40
3   2   Y     B    35    45
4   1   X     C    50    60
5   2   Y     C    55    65

进阶:适配列数不一致的分组

如果你的分组内列数不固定(部分组2列、部分组3列),可以动态生成Val列名,确保兼容性:

result_dfs = []

for group_name, cols in zip(group_names, col_groups):
    temp_df = df[['ID', 'ID2'] + cols].copy()
    temp_df['Group'] = group_name
    # 动态生成分组列的命名(Val1、Val2...ValN)
    new_col_names = ['ID', 'ID2'] + [f'Val{i+1}' for i in range(len(cols))] + ['Group']
    temp_df.columns = new_col_names
    # 动态调整列顺序
    col_order = ['ID', 'ID2', 'Group'] + [f'Val{i+1}' for i in range(len(cols))]
    temp_df = temp_df[col_order]
    result_dfs.append(temp_df)

final_df = pd.concat(result_dfs, ignore_index=True)

内容的提问来源于stack exchange,提问作者Sebastián Valladares

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 01:20:26