2014-11-21 38 views
0

我有一個python幀像大熊貓多指標選擇與範圍

y m  A  B 
1990 1 3.4 5 
     2 4  4.9 
... 
1990 12 4.0 4.5 
... 
2000 1 2.3 8.1 
     2 3.7 5.0 
... 
2000 12 2.4 9.1 

我想從第二索引(m)和1991 - 2000年多年選擇2-12。我似乎沒有得到正確的多指數切片。例如。我試圖

idx = pd.IndexSlice 
dfa = df.loc[idx[1:,1:],:] 

,但似乎並不切片第一指標。任何關於優雅解決方案的建議?

乾杯,邁克

+1

show df.info()。 – Jeff 2014-11-21 22:16:54

回答

1

沒有一個示例代碼重現您DF是很難猜測,但如果你DF是類似於:

import pandas as pd 
df = pd.read_csv(pd.io.common.StringIO(""" y m  A  B 
1990 1 3.4 5 
1990 2 4  4.9 
1990 12 4.0 4.5 
2000 1 2.3 8.1 
2000 2 3.7 5.0 
2000 12 2.4 9.1"""), sep='\s+') 

df 

     y m A B 
0 1990 1 3.4 5.0 
1 1990 2 4.0 4.9 
2 1990 12 4.0 4.5 
3 2000 1 2.3 8.1 
4 2000 2 3.7 5.0 
5 2000 12 2.4 9.1 

然後,代碼會提取你所需要的:

print df.loc[(df['y'].isin(range(1990,2001))) & df['m'].isin(range(2,12))] 

     y m A B 
1 1990 2 4.0 4.9 
4 2000 2 3.7 5.0 

如果你不過是df通過ym索引,那麼這也將這樣做:

df.set_index(['y','m'],inplace=True) 
years = df.index.get_level_values(0).isin(range(1990,2001)) 
months = df.index.get_level_values(1).isin(range(2,12)) 
df.loc[years & months] 

     y m A B 
1 1990 2 4.0 4.9 
4 2000 2 3.7 5.0 
+0

優秀。這非常整齊。謝謝,邁克 – Mike 2014-11-22 14:58:08