pandas 基于 2 级列表的切片 3 级多重索引

问题描述 投票:0回答:1

这是一个最小的例子:

import pandas as pd
import numpy as np
idx = pd.MultiIndex.from_product([[1,2,3], ['a', 'b', 'c'], [6, 7]])
df = pd.DataFrame(np.random.randn(18), index=idx)
selection = [(1, 'a'), (2, 'b')]

我想选择

df
中具有以
selection
中任何项目开头的索引的所有行。所以我想获取
df
的子数据框和索引:

(1, 'a', 6), (1, 'a', 7), (2, 'b', 6), (2, 'b', 7)

最直接/pythonian/pandasian 的方法是什么?我发现了什么:

sel = [id[:2] in selection for id in df.index]
df.loc[sel]
python pandas dataframe slice multi-index
1个回答
0
投票

尝试:

print(df.loc[(*zip(*selection), slice(None)), :])

打印:

              0
1 a 6  0.458827
    7 -0.846234
  b 6 -0.842123
    7  0.130637
2 a 6 -0.730928
    7  0.432800
  b 6 -1.499829
    7 -0.238423
© www.soinside.com 2019 - 2024. All rights reserved.