Python 基于索引删除,而不知道索引在哪里
假设我有一个Python 基于索引删除,而不知道索引在哪里,python,pandas,Python,Pandas,假设我有一个pandas.DataFrame和一个multi-index,我知道它有两个级别,year在第一个级别,我想保留特定的年份,我可以这样做 df = df.loc[yearStart:, :] df = df.loc[df.year >= yearStart] 如果我知道该指数只有两个级别,但不知道年份是哪一个级别,我可以破解一些肮脏的代码 if df.index.names[0] == 'year': df = df.loc[yearStart:, :] else
pandas.DataFrame
和一个multi-index
,我知道它有两个级别,year
在第一个级别,我想保留特定的年份,我可以这样做
df = df.loc[yearStart:, :]
df = df.loc[df.year >= yearStart]
如果我知道该指数只有两个级别,但不知道年份是哪一个级别,我可以破解一些肮脏的代码
if df.index.names[0] == 'year':
df = df.loc[yearStart:, :]
else
df = df.loc[:, yearStart:]
如果我知道它在索引中,但不知道它在哪个级别,也不知道索引有多少级别,该怎么办?如果year
不在索引中,而是在常规列中,我可以这样做
df = df.loc[yearStart:, :]
df = df.loc[df.year >= yearStart]
索引是否有类似的通用属性?您可以使用获取索引级别的列视图
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
您可以使用get\u level\u 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