基于索引删除,而不知道它在哪里

时间:2017-05-28 14:44:12

标签: python pandas

假设我有pandas.DataFrame MultiIndex,我知道它有两个等级,而year是第一个,我想保留特定的年份,我可以做< / p>

df = df.loc[yearStart:, :]

如果我知道索引只有两个级别,但year不是,我可以破解一些脏

if df.index.names[0] == 'year':
    df = df.loc[yearStart:, :]
else
    df = df.loc[:, yearStart:]

如果我知道它在索引中,但不是哪个级别,也不知道索引有多少级别怎么办?如果year不在索引中,而是常规列,我可以

df = df.loc[df.year >= yearStart]

索引是否有类似通用的内容?

1 个答案:

答案 0 :(得分:4)

您可以使用get_level_values获取索引级别的列式视图。

df = pd.DataFrame({'a': range(100)}, index=pd.MultiIndex.from_product([range(10), range(2010,2020)], names=['idx1', 'year']))

df.head()
Out[41]: 
           a
idx1 year   
0    2010  0
     2011  1
     2012  2
     2013  3
     2014  4

df[df.index.get_level_values('year') >= 2015].head()
Out[42]: 
           a
idx1 year   
0    2015  5
     2016  6
     2017  7
     2018  8
     2019  9