如何在不创建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
相关产品推荐
相关产品推荐

