2017-04-04 17 views
0

나는 DF2에 DF1을 변환해야합니다파이썬 구조 조정 Dataframe, 바꿀 행에 열 이름을 이동 dataframe

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) 등을 넣어 필요 레이블을 새 열로 이동 한 다음 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