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

如何将多列Pandas DataFrame重塑为指定的两列格式?

解决方案

可以通过分组后按列优先展开数据的方式快速实现需求,代码如下:

import pandas as pd

df = pd.DataFrame({
                   'col1': ['A', 'A', 'A', 'B', 'B', 'B'],
                   'col2': [1, 3, 5, 7, 9, 11],
                   'col3': [2, 4, 6, 8, 10, 12]
                  })

# 按col1分组,将每组的col2、col3按列优先展开为一维序列
grouped = df.groupby('col1').apply(lambda x: pd.Series(x[['col2', 'col3']].values.ravel('F')))
# 转置后重置索引得到预期格式
df_result = grouped.T.reset_index(drop=True)

print(df_result)

代码说明

  • values.ravel('F'):将每组的col2和col3数据按列优先的顺序展开(即先取第一行col2、col3,再第二行col2、col3,以此类推),正好匹配预期输出的元素顺序。
  • 分组后得到的结果以col1的取值为行索引,转置后即可将分组名转为列名,重置索引后得到目标DataFrame。

替代方法(分步更清晰)

如果需要更直观的分步操作,也可以通过melt转长格式后再重塑:

# 将col2、col3转为长格式
melted = df.melt(id_vars='col1', value_vars=['col2', 'col3'])
# 添加原行索引标记,保证排序后元素顺序正确
melted['row_id'] = melted.groupby('col1').cumcount() // 2
# 按分组、原行号、列名排序
melted = melted.sort_values(['col1', 'row_id', 'variable'])
# 重塑为宽格式
df_result = melted.pivot(columns='col1', values='value').reset_index(drop=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 05:03:27