Pandas - 在索引中的所有值上按条件过滤多索引

elz*_*elz 4 python dataframe pandas

我试图使用类似于以下的多索引过滤数据帧.

import numpy as np
import pandas as pd

data = pd.DataFrame(np.random.rand(8),
             index=[list('AABBCCDD'),
                    ['M', 'F']*4])
data['Count'] = [1,2,15,17,8,12,11,20]
Run Code Online (Sandbox Code Playgroud)

我想选择所有的行,其中"计数"为两个 "M"和"F"的给定外水平索引内是大于10因此对于例如数据帧,所有"B"和"d"的行应选择,但没有其他行.我能想到的唯一方法就是循环遍历外部索引,但是因为大熊猫中的循环几乎从不是做事的最佳方式,我认为必须有更好的解决方案.

WeN*_*Ben 6

groupbyindex然后我们使用filter+ all来获得比thresh更多的所有计数

data.groupby(level=0).filter(lambda x : x['Count'].gt(10).all())
Out[495]: 
            0  Count
B M  0.232856     15
  F  0.536026     17
D M  0.375064     11
  F  0.795447     20
Run Code Online (Sandbox Code Playgroud)

灵感来自Jpp使用 isin

s=data.Count.min(level=0).gt(10)
data.loc[data.index.get_level_values(0).isin(s[s].index)]
Run Code Online (Sandbox Code Playgroud)