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
您可以将 rsplit
与 n = 1
一起使用,这样它只会在最后一个下划线处拆分:
df1.columns = df1.columns.str.rsplit("_", n=1, expand=True)
df1.stack(level=0).rename_axis((None, "item")).reset_index("item")
我需要将 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
您可以将 rsplit
与 n = 1
一起使用,这样它只会在最后一个下划线处拆分:
df1.columns = df1.columns.str.rsplit("_", n=1, expand=True)
df1.stack(level=0).rename_axis((None, "item")).reset_index("item")