给定一个具有3个级别的multiindex的框架:
import pandas as pd
df = pd.concat({'a': pd.Series([1,2,3,1]),
'b': pd.Series([5,4,3,5]),
'c': pd.Series(range(9,13)),
'd': pd.Series(range(13,17))}, axis=1).set_index(['a', 'b', 'c'])
>>> d
a b c
1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16
我想使用loc与前两个级别的索引列表:
idx = pd.MultiIndex.from_arrays([[1, 2], [5, 4]], names=('a', 'b'))
>>> MultiIndex([(1, 5),
(2, 6)],
names=['a', 'b'])
我try 将.loc与单个索引一起使用:
df.loc[idx[0]]
>>> d
c
9 13
12 16
df.loc[idx[1]]
>>> d
c
10 14
我预计df.loc[idx]
返回的结果与
pd.concat([df.loc[i] for i in idx])
>>> d
c
9 13
12 16
10 14
但I df.loc[idx]
退货
ValueError: operands could not be broadcast together with shapes (2,2) (3,) (2,2)
有比pd.concat([df.loc[i] for i in idx])
更干净的东西来获得预期的结果吗?