如何转换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
相关产品推荐
相关产品推荐

