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

如何将DataFrame列拆分并将列名转为行内容?

解决DataFrame宽表转长表的方法

针对你给出的DataFrame结构,我们可以利用pandas的melt或wide_to_long函数完成格式转换,以下是两种可行的实现方式:

方法一:分步骤拆分后合并

这种方式逻辑直观,适合新手理解:

import pandas as pd

# 1. 构造示例数据
df = pd.DataFrame({
    'id': [1, 2],
    'shortTextContent': ['shortContent1', 'shortContent2'],
    'shortTextCode': ['shortCode1', 'shortCode2'],
    'longPlainTextContent': ['long1', 'long2'],
    'longTextCode': ['longCode1', 'longCode2'],
    'semiTextContent': ['semiContent1', 'semiContent2'],
    'semiTextCode': ['semiCode1', 'semiCode2']
})

# 2. 拆分内容列和编码列
content_df = df.melt(
    id_vars='id',
    value_vars=['shortTextContent', 'longPlainTextContent', 'semiTextContent'],
    var_name='content_category',
    value_name='content'
)

code_df = df.melt(
    id_vars='id',
    value_vars=['shortTextCode', 'longTextCode', 'semiTextCode'],
    var_name='code_category',
    value_name='code'
)

# 3. 匹配内容和编码的分类前缀
code_df['code_category'] = code_df['code_category'].str.replace('Code', '')

# 4. 合并并整理结果
result = pd.merge(content_df, code_df, left_on=['id', 'content_category'], right_on=['id', 'code_category'])
result = result[['id', 'content_category', 'content', 'code']].sort_values('id').reset_index(drop=True)

print(result)

运行后输出:

id      content_category        content      code
0   1      shortTextContent  shortContent1  shortCode1
1   1  longPlainTextContent          long1  longCode1
2   1       semiTextContent  semiContent1  semiCode1
3   2      shortTextContent  shortContent2  shortCode2
4   2  longPlainTextContent          long2  longCode2
5   2       semiTextContent  semiContent2  semiCode2

方法二:使用wide_to_long快速转换

这种方法更简洁,适合熟悉pandas高级函数的用户:

import pandas as pd

# 1. 构造示例数据(同方法一)
df = pd.DataFrame({
    'id': [1, 2],
    'shortTextContent': ['shortContent1', 'shortContent2'],
    'shortTextCode': ['shortCode1', 'shortCode2'],
    'longPlainTextContent': ['long1', 'long2'],
    'longTextCode': ['longCode1', 'longCode2'],
    'semiTextContent': ['semiContent1', 'semiContent2'],
    'semiTextCode': ['semiCode1', 'semiCode2']
})

# 2. 调整列名格式,让后缀统一为Content/Code
df.columns = df.columns.str.replace(r'(.*)(Content|Code)', r'\2_\1', regex=True)

# 3. 用wide_to_long转长表
result = pd.wide_to_long(
    df,
    stubnames=['Content', 'Code'],
    i='id',
    j='content_category',
    sep='_',
    suffix='.*'
).reset_index()

# 4. 整理列名和顺序
result = result.rename(columns={'Content': 'content', 'Code': 'code'})[['id', 'content_category', 'content', 'code']]

print(result)

输出结果和方法一完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 22:50:28