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

如何在不创建variable和value列的情况下实现DataFrame列转行?

解决DataFrame列转行(无中间列)的方案

这题我熟!要实现这种把成对的重复列(Reference/Reference.2、Amount/Amount.2)转成多行,且不生成variable和value这类中间列的需求,咱们直接用pandas的列拆分、重命名+合并就能搞定,步骤清晰又高效。

步骤1:构造原始DataFrame(模拟你的输入)

首先先把你给出的示例数据转换成pandas DataFrame:

import pandas as pd

# 模拟原始数据
data = {
    'Reference': ['20171201'],
    'Amount': ['100,00 €'],
    'Reference.2': ['20171204'],
    'Amount.2': ['110,00 €']
}
df = pd.DataFrame(data)

步骤2:拆分列组并重命名

把原始DataFrame拆分成两组列(每组对应一行目标数据),然后把第二组的列名改成和第一组一致:

# 第一组:保留原始的Reference和Amount列
group1 = df[['Reference', 'Amount']]

# 第二组:取Reference.2和Amount.2列,并重命名为目标列名
group2 = df[['Reference.2', 'Amount.2']].rename(
    columns={'Reference.2': 'Reference', 'Amount.2': 'Amount'}
)

步骤3:合并两组数据并调整索引

把处理好的两组数据纵向合并,再调整索引让它和你期望的格式一致:

# 纵向合并两组,忽略原来的索引
result = pd.concat([group1, group2], ignore_index=True)

# 把索引改成1:、2:的格式(可选,如果你需要和示例完全匹配的话)
result.index = [f"{i+1}:" for i in result.index]

最终结果

运行完上面的代码后,result就是你想要的格式:

Reference     Amount
1:      20171201  100,00 €
2:      20171204  110,00 €

这种方法的好处是完全贴合你的需求,没有多余的中间列,操作也都是pandas的基础方法,容易理解和维护。

内容的提问来源于stack exchange,提问作者Álvaro Rodríguez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:33:28