我有多索引数据框,类似:
df = pd.DataFrame(index = pd.MultiIndex.from_product([['mike', 'matt', 'dave', 'frank', 'larry'], range(10)]))
df['foo']="bar"
df.index.names=['people', 'socket']
我想做的是对与索引中前三个人相关联的所有行进行iloc-slice切片。 IE:检索people
是matt
mike
或dave
的所有行。
As far as I can tell,但是,熊猫根本不支持。看到了一些与总水平相关的骇客,但它们甚至都没有用。 get_level_values(0)
没有给出不同的级别值,并且levels()
返回未排序的frozenset
。
编辑:我应该说基于.loc
的解决方案对我不起作用。
答案 0 :(得分:1)
您在这里:
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
答案 1 :(得分:0)
一个想法是获取第一级的第一个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')
答案 2 :(得分:0)
另一个选择:
df[df.index.get_level_values(0)
.isin({'matt','mike','dave'})]