给定一个具有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'])
型
我尝试使用.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
型
但我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])
更清晰的东西来获得预期的结果?
2条答案
按热度按时间z9zf31ra1#
loc
与MultiIndex期望相同的级别,解决方法可能是将额外的级别临时设置为列:字符串
或
join
:型
输出量:
型
如果你想在这个过程中删除
a
/b
:型
或者:
型
输出量:
型
2g32fytz2#
将索引视为元组列表并传递到janitor.select:
字符串
另一个选择是使用字典:
型
pd.xs
的另一个选项:型