2017-04-04 168 views
0

我需要改造DF1到DF2:的Python - 重組數據幀,將列名於行,重塑數據幀

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,"$100",7,"$786"], [3,"$43",6,"$88"],  [5,"$565",8,"$876"]]) 
df1 

enter image description here

基本上我需要的就是把項目(A和B)爲在新列中添加標籤,然後將每行中的第3列和第4列數據移動到A項下。這會給我們每個日期的新行。

enter image description here

回答

1

您可以將列用下劃線分割它多指標,然後將其與stack重塑長格式:

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

enter image description here

如果您有多個下劃線列名如下:

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,"$100",7,"$786"], [3,"$43",6,"$88"],  [5,"$565",8,"$876"]]) 
df1 

enter image description here

您可以使用rsplitn = 1,使其只在最後一個下劃線分割:

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

enter image description here

+0

感謝您的快速反應。如果原始列名稱已經有「_」,而我只想按最後一個「_」分割名稱,該怎麼辦? – thatMeow

+0

你是什麼意思'「」'?空串? – Psidom

+0

對不起,由於某種原因下劃線沒有出現。 「下劃線」,「_」 – thatMeow