有没有办法可以使用这个多索引?
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
我有一个像这样的数据框,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