Python:如何按给定百分位数分组?

时间:2019-04-15 13:09:16

标签: python pandas group-by

我有一个数据框df

df
    User   City     Job             Age
0    A      x    Unemployed         33
1    B      x     Student           18
2    C      x    Unemployed         27
3    D      y  Data Scientist       28
4    E      y    Unemployed         45
5    F      y     Student           18

我要groupby City并做一些统计。如果必须计算平均值,则可以执行以下操作:

tmp = df.groupby(['City']).mean()

我想通过特定的分位数来做同样的事情。有可能吗?

4 个答案:

答案 0 :(得分:4)

def q1(x):
    return x.quantile(0.25)

def q2(x):
    return x.quantile(0.75)

fc = {'Age': [q1,q2]}
temp = df.groupby('City').agg(fc)
temp

       Age      
        q1    q2
City            
x     22.5  30.0
y     23.0  36.5

答案 1 :(得分:3)

我相信您需要DataFrameGroupBy.quantile

tmp = df.groupby('City')['Age'].quantile(0.4)
print (tmp)
City
x    25.2
y    26.0
Name: Age, dtype: float64

tmp = df.groupby('City')['Age'].quantile([0.25, 0.75]).unstack().add_prefix('q')
print (tmp)
      q0.25  q0.75
City              
x      22.5   30.0
y      23.0   36.5

答案 2 :(得分:1)

我正在使用describe

df.groupby('City')['Age'].describe()[['25%','75%']]
Out[542]: 
       25%   75%
City            
x     22.5  30.0
y     23.0  36.5

答案 3 :(得分:1)

您可以使用:

df.groupby('City')['Age'].apply(lambda x: np.percentile(x,[25,75])).reset_index().rename(columns={'Age':'25%, 75%'})

  City      25%, 75%
0    x  [22.5, 30.0]
1    y  [23.0, 36.5]