2014-11-21 36 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