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

如何在Pandas中无循环转换DataFrame格式以基于name关联其他表?

Pandas DataFrame 格式转换问题

问题描述

原始DataFrame结构:

id     name     value1   value2    value3     Type
=======================================================
 1     AAA       1.0       1.5       1.8      NEW
 2     BBB       2.0       2.3       2.5      NEW
 3     CCC       3.0       3.6       3.7      NEW

希望转换为以下格式,以便通过唯一的name字段关联另一个DataFrame:

Type        AAA                     BBB                 CCC
============================================================
NEW    [1.0, 1.5, 1.8]       [2.0, 2.3, 2.5]      [3.0, 3.6, 3.7]

询问是否有无需过多循环的实现方法。

实现方法

完全可以用Pandas内置方法实现,不需要手动写循环,步骤如下:

  1. 合并value列为列表
    把value1、value2、value3按行合并成列表列,用apply配合list即可:
df['values'] = df[['value1', 'value2', 'value3']].apply(list, axis=1)
  1. 重塑数据结构
    用pivot方法将name转成列名,Type作为行索引,values作为对应值:
result = df.pivot(index='Type', columns='name', values='values').reset_index()
  1. 清理列名层级
    默认pivot后会保留列名层级,可通过以下代码去掉:
result.columns.name = None

完整代码示例

import pandas as pd

# 构造示例数据
data = {
    'id': [1, 2, 3],
    'name': ['AAA', 'BBB', 'CCC'],
    'value1': [1.0, 2.0, 3.0],
    'value2': [1.5, 2.3, 3.6],
    'value3': [1.8, 2.5, 3.7],
    'Type': ['NEW', 'NEW', 'NEW']
}
df = pd.DataFrame(data)

# 合并value列为列表
df['values'] = df[['value1', 'value2', 'value3']].apply(list, axis=1)

# 转换为目标格式
result = df.pivot(index='Type', columns='name', values='values').reset_index()
result.columns.name = None

print(result)

运行后即可得到你需要的格式,全程基于Pandas向量式操作,效率远高于循环实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 01:31:15