我有像
这样的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:],:]
但是这似乎没有在第一个索引上切片。关于优雅解决方案的任何建议?
干杯,迈克
答案 0 :(得分:2)
如果没有示例代码来重现您的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
是y
和m
的索引,那么这将是相同的:
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