另一列的非NaN的Groupby计数以及pandas中相同列的具体计算

Dan*_*ish 2 dataframe python-3.x pandas

我有一个数据框,如下所示

ID    Class    Score1       Score2   Name
1     A        9            7        Xavi
2     B        7            8        Alba
3     A        10           8        Messi
4     A        8            10       Neymar
5     A        7            8        Mbappe
6     C        4            6        Silva
7     C        3            2        Pique
8     B        5            7        Ramos
9     B        6            7        Serge
10    C        8            5        Ayala
11    A        NaN          4        Casilas
12    A        NaN          4        De_Gea
13    B        NaN          2        Seaman
14    C        NaN          7        Chilavert
15    B        NaN          3        Courtous
Run Code Online (Sandbox Code Playgroud)

根据上面的内容,我想计算每个类别中 scoer1 小于或等于 6 的玩家数量以及非 NaN 行的数量(按类别)

预期输出:

Class     Total_Number   Count_Non_NaN    Score1_less_than_6_#    Avg_score1  
A         6              4                0                       8.5 
B         5              3                2                       6 
C         4              3                2                       5
Run Code Online (Sandbox Code Playgroud)

尝试了下面的代码

df2 = df.groupby('Class').agg(Total_Number = ('Score1','size'),
                             Score1_less_than_6 = ('Score1',lambda x: x.between(0,6).sum()),
                             Avg_score1 = ('Score1','mean'))

df2 = df2.reset_index()
df2
Run Code Online (Sandbox Code Playgroud)

Shu*_*rma 5

Groupbyaggregate使用字典

df['s'] = df['Score1'].le(6)
df.groupby('Class').agg(**{'total_number': ('Score1', 'size'),
                           'count_non_nan': ('Score1', 'count'),
                           'score1_less_than_six': ('s', 'sum'),
                           'avg_score1': ('Score1', 'mean')})
Run Code Online (Sandbox Code Playgroud)
       total_number  count_non_nan  score1_less_than_six  avg_score1
Class                                                               
A                 6              4                     0         8.5
B                 5              3                     2         6.0
C                 4              3                     2         5.0
Run Code Online (Sandbox Code Playgroud)