分位数分组 pandas 数据框

quantile groupby pandas dataframe

我有以下 pandas 数据框。我想创建一个新列,它会给我 75% 的分位数率,由州和县

下面的代码只给我 75% 的分位数率作为输出,我想在现有的 df 中创建一个分位数率为 75% 的新列

df = df.groupby('State')['rate'].quantile(0.75)

State county rate
AK a 27.5
AK a 30.5
GA a 35.5
GA b 50.0
GA b 75.5
GA c 90.5
AR a 16.5
AR a 10.5

GroupBy.transform 与 lambda 函数一起使用:

df['q'] = df.groupby('State')['rate'].transform(lambda x: x.quantile(0.75))

如果还需要county:

df['q'] = df.groupby(['State', 'county'])['rate'].transform(lambda x: x.quantile(0.75))
print (df)
  State county  rate       q
0    AK      a  27.5  29.750
1    AK      a  30.5  29.750
2    GA      a  35.5  35.500
3    GA      b  50.0  69.125
4    GA      b  75.5  69.125
5    GA      c  90.5  90.500
6    AR      a  16.5  15.000
7    AR      a  10.5  15.000

编辑:如果可能,缺少一些值:

df['q'] = (df.fillna({'State':'missing', 'county':'missing'})
            .groupby(['State', 'county'])['rate'].transform(lambda x: x.quantile(0.75)))

或者 pd.MultiIndex.from_framepd.MultiIndex.map:

df['new'] = pd.MultiIndex.from_frame(df[['State', 'county']]).map(df.groupby(['State', 'county'])['rate'].quantile(0.75))

现在:

>>> df
  State county  rate     new
0    AK      a  27.5  29.750
1    AK      a  30.5  29.750
2    GA      a  35.5  35.500
3    GA      b  50.0  69.125
4    GA      b  75.5  69.125
5    GA      c  90.5  90.500
6    AR      a  16.5  15.000
7    AR      a  10.5  15.000
>>>