Python iloc&x27;对多索引的一个级别进行排序
我有多索引数据帧,类似于:Python iloc&x27;对多索引的一个级别进行排序,python,pandas,Python,Pandas,我有多索引数据帧,类似于: df = pd.DataFrame(index = pd.MultiIndex.from_product([['mike', 'matt', 'dave', 'frank', 'larry'], range(10)])) df['foo']="bar" df.index.names=['people', 'socket'] 我想做的是iloc切片与索引中前三个人相关联的所有行。IE:检索people为mattmike或dave的所有行 然而,熊猫根本不支持这一点。看
df = pd.DataFrame(index = pd.MultiIndex.from_product([['mike', 'matt', 'dave', 'frank', 'larry'], range(10)]))
df['foo']="bar"
df.index.names=['people', 'socket']
我想做的是iloc切片与索引中前三个人相关联的所有行。IE:检索people
为matt
mike
或dave
的所有行
然而,熊猫根本不支持这一点。看到了一些与粗略级别相关的黑客,但它们甚至都不起作用get\u level\u value(0)
不提供不同的级别值,levels()
返回未排序的frozenset
编辑:我应该说基于
.loc
的解决方案对我不起作用。一个想法是获取第一级的第一个uniqe值,通过loc
索引和选择:
df = df.loc[df.index.get_level_values(0).unique()[:3]]
详细信息:
print (df.index.get_level_values(0).unique()[:3])
Index(['mike', 'matt', 'dave'], dtype='object', name='people')
给你:
df = pd.DataFrame(index = pd.MultiIndex.from_product([['mike', 'matt', 'dave', 'frank', 'larry'], range(10)], names=['people', 'socket']))
df['foo']="bar"
df.index.names=['people', 'socket']
# get rows
select_rows = df.loc[['mike', 'matt', 'dave']]
输出:
people socket
mike 0 bar
1 bar
2 bar
3 bar
4 bar
5 bar
6 bar
7 bar
8 bar
9 bar
matt 0 bar
1 bar
2 bar
3 bar
4 bar
5 bar
6 bar
7 bar
8 bar
9 bar
dave 0 bar
1 bar
2 bar
3 bar
4 bar
5 bar
6 bar
7 bar
8 bar
9 bar
另一种选择:
df[df.index.get_level_values(0)
.isin({'matt','mike','dave'})]