2015-08-26 1 views
0

У меня есть панд панель:Преобразование панели в DataFrame с многоуровневыми столбцами (minor, item)?

Items axis: X1 to X3 
Major_axis axis: (1973-09-30 00:00:00, 1989-03-31 00:00:00) to (2015-07-31 00:00:00, 2015-08-21 00:00:00) 
Minor_axis axis: A to C 

, и я хотел бы, чтобы преобразовать его в dataframe с многоуровневым колонке (Пункт, Minor), многоуровневые столбцы будут выглядеть следующим образом:

mi_tuples = [ ('A','X1'), ('A','X2'), ('A','X3'), ('B','X1'), ('B','X2'), ('B','X3'), ('C','X1'), ('C','X2'), ('C','X3') ] 
mi_columns = pd.MultiIndex.from_tuples(mi_tuples, names = ['minor', 'items']) 

Любые мысли?

Спасибо!

ответ

3

Я думаю, что сочетание to_frame, unstack и swaplevel может вас туда добраться. Ниже приведены некоторые примеры данных.

In [134]: pnl = pd.io.data.DataReader(['GOOG', 'AAPL'], 'yahoo') 

In [135]: pnl 
Out[135]: 
<class 'pandas.core.panel.Panel'> 
Dimensions: 6 (items) x 1421 (major_axis) x 2 (minor_axis) 
Items axis: Open to Adj Close 
Major_axis axis: 2010-01-04 00:00:00 to 2015-08-25 00:00:00 
Minor_axis axis: AAPL to GOOG 

In [136]: df = pnl.to_frame().unstack(level=1) 

In [137]: df.columns = df.columns.swaplevel(0,1) 

In [138]: df.info() 
<class 'pandas.core.frame.DataFrame'> 
DatetimeIndex: 1421 entries, 2010-01-04 to 2015-08-25 
Data columns (total 12 columns): 
(AAPL, Open)   1421 non-null float64 
(GOOG, Open)   357 non-null float64 
(AAPL, High)   1421 non-null float64 
(GOOG, High)   357 non-null float64 
(AAPL, Low)   1421 non-null float64 
(GOOG, Low)   357 non-null float64 
(AAPL, Close)  1421 non-null float64 
(GOOG, Close)  357 non-null float64 
(AAPL, Volume)  1421 non-null float64 
(GOOG, Volume)  357 non-null float64 
(AAPL, Adj Close) 1421 non-null float64 
(GOOG, Adj Close) 357 non-null float64 
dtypes: float64(12) 
memory usage: 144.3 KB 
Смежные вопросы