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

如何将宽格式DataFrame转换为每列对应单行的长格式?

解决方法

原始DataFrame

-Name0123
0Johnobject 1object 2Object 3object 4
1Smithobject 1object 2Object 3object 4
2Jackobject 1object 2Object 3object 4

目标格式

-Name0
0Johnobject1
1Johnobject2
2Johnobject3
3Johnobject4
4Smithobject1
5Smithobject2
6Smithobject3
7Smithobject4
8Jackobject1
9Jackobject2
10Jackobject3
11Jackobject4

代码实现

用pandas的melt函数完成宽表转长表,再处理字符串格式:

import pandas as pd

# 构造原始数据
df = pd.DataFrame({
    'Name': ['John', 'Smith', 'Jack'],
    '0': ['object 1', 'object 1', 'object 1'],
    '1': ['object 2', 'object 2', 'object 2'],
    '2': ['Object 3', 'Object 3', 'Object 3'],
    '3': ['object 4', 'object 4', 'object 4']
})

# 宽表转长表,保留Name作为分组列
melted_df = df.melt(id_vars='Name', value_name='0')

# 去掉object(含大写开头的Object)后的空格,统一格式
melted_df['0'] = melted_df['0'].str.replace(r'(?i)object\s', 'object', regex=True)

# 重置索引并调整列顺序
result_df = melted_df.reset_index(drop=False).rename(columns={'index': '-'})[['-', 'Name', '0']]

print(result_df)

步骤说明

  1. 宽转长:melt函数把Name列作为标识,将原来的0-3列的所有值整合到新的0列里,自动为每个Name生成多行数据。
  2. 格式统一:用正则替换去掉object(不区分大小写)后面的空格,把Object 3这类格式统一成object3。
  3. 调整索引和列顺序:重置索引并将索引列命名为-,最后调整列的顺序匹配目标格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:25:28