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

基于值数据类型转置Pandas DataFrame的实现方法咨询

解决方法

核心思路是先用melt把宽表转成窄表,再根据值的类型拆分到对应列,最后补全ID列。

步骤1:导入库并构建输入DataFrame

import pandas as pd
import numpy as np

# 构建输入DataFrame A
df_a = pd.DataFrame({
    'FIELD_A': [123123, 123124, 123144],
    'FIELD_B': [8, 7, 99],
    'FIELD_C': ['a', 'c', 'x'],
    'FIELD_D': [23423, 6464, 234]
})

步骤2:用melt转换为窄表

将FIELD_A作为标识列,把其他列转成FIELD_NAME(处理掉前缀)和value两列:

df_melted = df_a.melt(id_vars='FIELD_A', var_name='FIELD_NAME', value_name='value')
# 移除FIELD_前缀,比如FIELD_B转为B
df_melted['FIELD_NAME'] = df_melted['FIELD_NAME'].str.replace('FIELD_', '')

步骤3:按值类型拆分到对应列

判断每个值的类型,字符串类型放入FIELD_STR_VALUE,数值类型放入FIELD_NUM_VALUE:

def split_value(val):
    if isinstance(val, str):
        return pd.Series([val, np.nan])
    else:
        return pd.Series([np.nan, val])

# 应用函数拆分列
df_melted[['FIELD_STR_VALUE', 'FIELD_NUM_VALUE']] = df_melted['value'].apply(split_value)
# 删除中间过渡的value列
df_melted = df_melted.drop('value', axis=1)

步骤4:添加ID列并调整顺序

用cumcount生成自增ID,再调整列的顺序匹配目标格式:

df_melted['ID'] = df_melted.groupby('FIELD_A').cumcount() + 1
# 调整列顺序
df_b = df_melted[['ID', 'FIELD_A', 'FIELD_NAME', 'FIELD_STR_VALUE', 'FIELD_NUM_VALUE']]

# 若需要将空值显示为空字符串,执行以下代码
df_b = df_b.fillna('')

运行后得到的df_b就是你需要的目标格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 03:01:12