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

如何将Pandas DataFrame所有列合并为一列并保留索引

Pandas DataFrame 转置为纵向分组格式问题

原始数据

我有一个结构如下的Pandas DataFrame(df1):

JobMachinecommandTime
OneMoonsleep12:00
TwoJupiterpython13:00

目标格式

希望将其转换为以下纵向分组格式(首行仅为表格编辑需求,实际导出无表头),以便用df1.to_html()导出:

AttributeValue
JobOne
MachineMoon
commandSleep
Time12:00
JobTwo
MachineJupiter
Commandpython
Time13:00

尝试过的方法

  • 使用df1.T转置:结果接近但无法复制索引并调整列结构
  • 使用df1.T.stack():无法生成独立的索引序列
  • 使用pd.wide_to_long:未取得预期进展
  • 使用pd.melt(df1.T):右侧值符合要求,但左侧丢失了需要重复的原列名索引

解决方案

可以通过转置、索引重置与重复拼接的组合操作实现需求,具体代码如下:

方法一:分步实现

import pandas as pd

# 构造原始DataFrame
df1 = pd.DataFrame({
    'Job': ['One', 'Two'],
    'Machine': ['Moon', 'Jupiter'],
    'command': ['sleep', 'python'],
    'Time': ['12:00', '13:00']
})

# 1. 转置并重置索引,将原列名转为第一列
transposed_df = df1.T.reset_index()

# 2. 重复索引标签(对应原DataFrame的行数)
attribute_col = transposed_df['index'].repeat(len(df1))

# 3. 提取所有值并转为一维数组
value_col = transposed_df.drop('index', axis=1).values.flatten()

# 4. 构建最终DataFrame
result_df = pd.DataFrame({'Attribute': attribute_col, 'Value': value_col})

# 导出为HTML(无表头、无索引)
html_output = result_df.to_html(header=False, index=False)

方法二:链式操作(更简洁)

result_df = (df1.T
             .reset_index()
             .assign(index=lambda x: x['index'].repeat(len(df1)))
             .melt(id_vars='index', value_name='Value')
             .drop('variable', axis=1)
             .rename(columns={'index': 'Attribute'})
             .reset_index(drop=True))

生成的result_df完全匹配目标格式,导出的HTML也会和你需要的结构一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:35:20