分位数分组 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_frame
和 pd.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
>>>
我有以下 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_frame
和 pd.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
>>>