Python - 重组数据框,将列名移动到行,重塑数据框

Python - Restructure Dataframe, move column names to rows, reshape dataframe

我需要将 df1 转换为 df2:

import pandas as pd
from pandas import DataFrame, Series

import numpy as np

df1 = pd.DataFrame(index=['date_1', 'date_2', 'date_3'], 
              columns=["A_count", "A_dollar", "B_count", "B_dollar"], 
              data=[[10,"0",7,"6"], [3,"",6,""],     [5,"5",8,"6"]])
df1

基本上我需要的是将项目(A 和 B)作为标签放在新列中,然后将第 3 列和第 4 列数据每行移动到 A 项目下。这将为我们提供每个日期的新行。

您可以通过使用下划线将列拆分为多索引,然后使用 stack:

将其重塑为长格式
df1.columns = df1.columns.str.split("_", expand=True)
df1.stack(level=0).rename_axis((None, "item")).reset_index("item")

如果列名中有多个下划线如下:

df1 = pd.DataFrame(index=['date_1', 'date_2', 'date_3'], 
              columns=["A_x_count", "A_x_dollar", "B_y_count", "B_y_dollar"], 
              data=[[10,"0",7,"6"], [3,"",6,""],     [5,"5",8,"6"]])
df1

您可以将 rsplitn = 1 一起使用,这样它只会在最后一个下划线处拆分:

df1.columns = df1.columns.str.rsplit("_", n=1, expand=True)
df1.stack(level=0).rename_axis((None, "item")).reset_index("item")