2012-11-26 62 views
1

使用MultiIndex列創建DataFrame時,似乎無法使用MultiIndex返回單個列。而是返回帶有索引的對象:MultiIndex和DataFrame中的列

import pandas as pd 
import numpy as np 

dates = np.asarray(pd.date_range('1/1/2000', periods=8)) 
_metaInfo = pd.MultiIndex.from_tuples([('AA', '[m]'), ('BB', '[m]'), ('CC', '[s]'), ('DD', '[s]')], names=['parameter','unit']) 

df = pd.DataFrame(np.random.randn(8, 4), index=dates, columns=_metaInfo) 
print df.get('AA').columns 
# Index([[m]], dtype=object) 

其中缺少'參數'信息。 這是一個錯誤,是否有解決方法?

+0

你的意思是說它沒有名稱屬性('AA')? –

+0

不,你失去了MultiIndex的一個層次(在這裏是名字) – user1515250

回答

1

我也一直在努力。相反,爲單個設備增加一個額外的級別(因此它與MultiIndex相匹配),也讓我很忙。

我有時用這種方式來保持完好指數:

print df.T[[('AA', '[m]') == col for col in df.columns]].T 

parameter   AA 
unit    [m] 
2000-01-01 0.972434 
2000-01-02 -0.581852 
2000-01-03 -0.784172 
2000-01-04 -0.843441 
2000-01-05 -1.030200 
2000-01-06 -0.864225 
2000-01-07 -0.530056 
2000-01-08 -0.651367 

但是當你的指數是比較複雜的,那不是最靈活的解決方案。在這個例子中,它會工作。

+0

MultiIndex行和MultiIndex列之間似乎存在不一致。使用日期= np.asarray(pd.date_range('1/1/2000',句點= 4)) _metaInfo = pd.MultiIndex.from_tuples([('AA','[m]'),('BB' ,'[m]'),('CC','[s]'),('DD','[s]')],names = ['parameter','unit']) df = pd .DataFrame(np.random.randn(4,4),index = _metaInfo,columns =日期) – user1515250

+0

MultiIndex行和MultiIndex列之間似乎存在不一致。使用轉置允許您選擇行作爲df [「AA」:「AA」],然後返回MultiIndex DataFrame(而不是丟失信息),但是,df.xs(「AA」,axis = 1)返回一個DataFrmae單級索引(從而丟失信息)。除此之外,當我用列AA和BB定義單級(Index)DataFrame時,那麼df [df [「AA」]> 0]會給我列AA和BB的所有行,其中AA中的元素更大比0.0。但是,如果我在MultiIndex列的DataFrame中執行相同操作,那麼我會崩潰。 – user1515250

相關問題