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

使用Pandas实现列转行:重构多字段新旧值数据集

Pandas实现列转行数据转换方法

原始数据集

IDOld value.CarbonOld value.DioxideNew value.CarbonNew Value.Dioxide
12334.8913.4556.6611.11
45612.1355.6666.8812.33

目标数据集

IDFieldNew ValueOld Value
123Carbon56.6634.89
123Dioxide11.1113.45
456Carbon66.8812.13
456Dioxide12.3355.66

实现方法

以下提供两种简洁的Pandas实现方式,按需选择:

方法一:先转长表再透视(灵活通用)

import pandas as pd

# 构造原始数据(实际场景可替换为pd.read_csv/pd.read_excel读取文件)
data = {
    'ID': [123, 456],
    'Old value.Carbon': [34.89, 12.13],
    'Old value.Dioxide': [13.45, 55.66],
    'New value.Carbon': [56.66, 66.88],
    'New Value.Dioxide': [11.11, 12.33]
}
df = pd.DataFrame(data)

# 1. 将宽表转为长表,保留ID作为标识列
melted_df = df.melt(id_vars='ID', var_name='Type.Field', value_name='Value')

# 2. 拆分列名,分离出值类型(Old/New)和Field
melted_df[['Type', 'Field']] = melted_df['Type.Field'].str.split('.', expand=True)

# 3. 统一值类型的命名格式
melted_df['Type'] = melted_df['Type'].replace({
    'Old value': 'Old Value',
    'New value': 'New Value',
    'New Value': 'New Value'
})

# 4. 透视表转成目标格式
result_df = melted_df.pivot_table(
    index=['ID', 'Field'],
    columns='Type',
    values='Value',
    aggfunc='first'
).reset_index()

# 5. 调整列顺序匹配目标结构
result_df = result_df[['ID', 'Field', 'New Value', 'Old Value']]

print(result_df)

方法二:拆分合并(逻辑直观)

import pandas as pd

# 构造原始数据
data = {
    'ID': [123, 456],
    'Old value.Carbon': [34.89, 12.13],
    'Old value.Dioxide': [13.45, 55.66],
    'New value.Carbon': [56.66, 66.88],
    'New Value.Dioxide': [11.11, 12.33]
}
df = pd.DataFrame(data)

# 1. 处理Old Value相关列,转长表
old_df = df[['ID', 'Old value.Carbon', 'Old value.Dioxide']].rename(
    columns={'Old value.Carbon': 'Carbon', 'Old value.Dioxide': 'Dioxide'}
).melt(id_vars='ID', var_name='Field', value_name='Old Value')

# 2. 处理New Value相关列,转长表
new_df = df[['ID', 'New value.Carbon', 'New Value.Dioxide']].rename(
    columns={'New value.Carbon': 'Carbon', 'New Value.Dioxide': 'Dioxide'}
).melt(id_vars='ID', var_name='Field', value_name='New Value')

# 3. 合并两个表得到最终结果
result_df = pd.merge(old_df, new_df, on=['ID', 'Field'])

# 4. 调整列顺序
result_df = result_df[['ID', 'Field', 'New Value', 'Old Value']]

print(result_df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 00:16:00