有没有办法可以使用这个多索引?

Is there a way i could work with this multiindex?

我有一个像这样的数据框,https://i.stack.imgur.com/2Sr29.png。 RBD是一个标识每个学校的代码,LET_CUR对应一个class,MRUN对应每个class的学生数量,我需要的是:

我想知道有多少学校至少有一个 class 有超过 45 名学生,到目前为止我还没有想出一个代码来做到这一点。

谢谢。

尝试以下方法(这里我构建了一个与您类似的数据框结构):

df = pd.DataFrame({'RBD': [1, 1, 2, 3], 
                   'COD_GRADO': ['1', '2', '1', '3'], 
                   'LET_CUR':['A', 'C', 'B', 'A'], 
                   'MRUN':[65, 34, 64, 25]}, 
                   columns=['RBD', 'COD_GRADO', 'LET_CUR', 'MRUN'])
print(df)
n_schools = df.loc[df['MRUN'] >= 45].shape[0]
print(f"Number of shools with 45+ students is {n_schools}")

然后输出,对于我的例子来说(table 格式化以便于阅读):

(pd indices) RBD COD_GRADO LET_CUR MRUN
0 1 1 A 65
1 1 2 C 34
2 2 1 B 64
3 3 3 A 25
> Number of shools with 45+ students is 2

来自您的 DataFrame :

>>> import pandas as pd
>>> from io import StringIO

>>> df = pd.read_csv(StringIO("""
RBD,LET_CUR,MRUN
1,A,65
1,B,23
1,C,21
2,A,22
2,B,20
2,C,34
3,A,54
4,A,23
4,B,11
5,A,15
5,C,16
6,A,76"""))
>>> df = df.set_index(['RBD', 'LET_CUR'])
>>> df
            MRUN
RBD LET_CUR     
1   A       65
    B       23
    C       21
2   A       22
    B       20
    C       34
3   A       54
4   A       23
    B       11
5   A       15
    C       16
6   A       76

因为我们想知道至少有一个 class 有超过 45 名学生的学校的数量,我们可以先过滤 DataFrame 列上的 MRUN 然后使用nunique() 计算独特学校数量的方法:

>>> df_filtered = df[df['MRUN'] > 45].reset_index()
>>> df_filtered['RBD'].nunique()
3