Skip to main content
 首页 » 编程设计

python之将 describe 函数应用于 pandas groupby 时如何忽略行的最大值和最小值

2025年05月04日14freeliver54

我正在使用 pandas groupby 函数并尝试获取分组结果的描述,但没有每个组的最大行和最小行。我找不到我的问题的正确答案。

data = {'class': ['a', 'a', 'a', 'a', 'a', 'b', 'b', 'b', 'b', 'b'], 
       'num': [-10,18,12,15,50, 10,60,51,54,100]} 
df = pd.DataFrame(data) 
df.groupby('class').describe() 

输出:

         num 
        count   mean    std        min    25%    50%     75%    max 
class                                
a      5.0     17.0   21.494185   -10.0   12.0    15.0  18.0    50.0 
b      5.0     55.0   31.984371    10.0   51.0    54.0  60.0    100.0 

我想要的结果是:

       num        
       count    mean    std         min     25%     50%     75%  max 
class                                
a      3.0      15.0    3.000000    12.0    13.5    15.0    16.5    18.0 
b      3.0      55.0    4.582576    51.0    52.5    54.0    57.0    60.0 

请您参考如下方法:

使用 transform和掩蔽:

df['max']=df.groupby('class')['num'].transform('max') 
df['min']=df.groupby('class')['num'].transform('min') 
 
mask = df['num'].ne(df['min'])&df['num'].ne(df['max']) 
 
df.loc[mask,:].groupby('class')['num'].describe() 
 
       count  mean       std   min   25%   50%   75%   max 
class                                                      
a        3.0  15.0  3.000000  12.0  13.5  15.0  16.5  18.0 
b        3.0  55.0  4.582576  51.0  52.5  54.0  57.0  60.0 

或者:

df.loc[mask, ['class', 'num']].groupby('class').describe() 
        num                                               
      count  mean       std   min   25%   50%   75%   max 
class                                                     
a       3.0  15.0  3.000000  12.0  13.5  15.0  16.5  18.0 
b       3.0  55.0  4.582576  51.0  52.5  54.0  57.0  60.0