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

如何转换Pandas DataFrame:将多组(X,Y)列转置为单列

Pandas宽表转长表实现方案

你遇到的是典型的宽格式转长格式数据处理需求,df.transpose()是行列转置,显然不适用这类场景,正确的做法是使用Pandas的melt()方法,以下是具体实现步骤:

1. 构造示例数据

首先还原你的初始DataFrame:

import pandas as pd

# 构造初始数据
raw_data = {
    '(A, B)': ['(22, 3)', '(23, 4)', '(27, 3)', '(42, 5)'],
    '(X1, Y1)': [4.33, 5.23, 4.66, 7.44],
    '(X2, Y2)': [3.45, 5.65, 13.45, 12.32],
    '(X3,Y3)': [11.12, 12.23, 12.34, 1.23]
}
df = pd.DataFrame(raw_data)

2. 使用melt()转换格式

melt()专门用于将宽表"拉长"为长表,核心参数说明:

  • id_vars:指定转换过程中保持不变的列(这里是(A, B))
  • value_name:指定转换后值列的名称(这里设为(X, Y))

执行代码:

# 转换格式
melted_df = df.melt(id_vars=['(A, B)'], value_name='(X, Y)')
# 移除不需要的原列名标识列
melted_df = melted_df.drop(columns='variable')
# 重置索引(可选,让索引连续)
melted_df = melted_df.reset_index(drop=True)

3. 转换结果

执行后得到的melted_df完全符合你的目标格式:

(A, B)(X, Y)
0(22, 3)4.33
1(23, 4)5.23
2(27, 3)4.66
3(42, 5)7.44
4(22, 3)3.45
5(23, 4)5.65
6(27, 3)13.45
7(42, 5)12.32
8(22, 3)11.12
9(23, 4)12.23
10(27, 3)12.34
11(42, 5)1.23

扩展说明

如果你的业务数据中有超过50组(X,Y)列,这个方法依然适用——melt()会自动识别所有非id_vars的列并进行转换,无需手动指定每一列,完全适配大规模数据场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 14:15:53