首页 > 解决方案 > 计算 Groupby Dataframe 上的分位数并将值添加回 DF

问题描述

我要做的是将我的数据框分组到分类列上,使用第二列计算分位数,并将结果存储在第三列中。为简单起见,我们只做 P50。下面的例子:

原DF:

Col1     Col2 
 A        2   
 B        4
 C        2
 A        6
 B        12
 C        10

所需的DF:

Col1     Col2    Col3_P50
 A        2         4
 B        4         8
 C        2         6 
 A        6         4
 B        12        8
 C        10        6

一种简单的方法是为每个类别(A、B、C)创建一个小数据框并计算分位数并合并回现有的 DF,但我的实际数据集有 100 个类别,所以这不是一个选项。我们欢迎所有的建议!

标签: pythonpandasdataframe

解决方案


你可以transformquantile

df['Col3_P50'] = df.groupby("Col1")['Col2'].transform('quantile',0.5)
print(df)

  Col1  Col2  Col3_P50
0    A     2         4
1    B     4         8
2    C     2         6
3    A     6         4
4    B    12         8
5    C    10         6

如果您有多个值,一种方法是创建一个字典并将键设置为 groupby 内的列名和值:

d = {'P_50':0.5,'P_90':0.9}
for k,v in d.items():
    df[k]=df.groupby("Col1")['Col2'].transform('quantile',v)
print(df)

 Col1  Col2  P_50  P_90
0    A     2     4   5.6
1    B     4     8  11.2
2    C     2     6   9.2
3    A     6     4   5.6
4    B    12     8  11.2
5    C    10     6   9.2

推荐阅读