Python: как сгруппировать данный процентиль? - PullRequest
2 голосов
/ 15 апреля 2019

У меня есть фрейм данных 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 ]

4 голосов
/ 15 апреля 2019
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
3 голосов
/ 15 апреля 2019

Я считаю, что вам нужно 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
1 голос
/ 15 апреля 2019

Вы можете использовать:

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]
1 голос
/ 15 апреля 2019

Я использую describe

df.groupby('City')['Age'].describe()[['25%','75%']]
Out[542]: 
       25%   75%
City            
x     22.5  30.0
y     23.0  36.5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...