我有一个包含2个实验组的数据框,我正在尝试获取百分位数分布。但是,数据已被分组:
df = pd.DataFrame({'group': ['control', 'control', 'control','treatment','treatment','treatment'],
'month': [1,4,9,2,5,12],
'ct': [8,4,2,5,5,7]})
我想计算哪个月代表每个组的第25、50、75%,但是数据框已经按组/月变量分组了。
更新1: 我意识到我没有弄清楚我遇到的麻烦。这是一个分组的数据框,因此,例如,控件具有8个数据点,其中month = 1,4 = month = 4,2 = month =9。以下百分数值应为:
x = pd.Series([1,1,1,1,1,1,1,1,4,4,4,4,9,9)]
x.quantile([0.25,0.5,0.75])
>> 0.25 1.0
0.50 1.0
0.75 4.0
dtype: float64
按组分组并进行分位数不能提供准确的答案。有没有一种方法可以爆炸计数并获取未分组值的百分位数?最终对象应具有以下值:
p25 p50 p75
control 1 1 4
treatment 2 5 12
答案 0 :(得分:1)
您可以尝试使用pd.quanitle
并以所需的百分比作为列表
df.groupby('group').quantile([0.25,0.50,0.75])
出局:
ct month
group
control 0.25 3.0 2.5
0.50 4.0 4.0
0.75 6.0 6.5
treatment 0.25 5.0 3.5
0.50 5.0 5.0
0.75 6.0 8.5
答案 1 :(得分:1)
您可以使用Series.repeat
然后获取分位数:
df.groupby('group').apply(lambda x: (x.month.repeat(x.ct)).quantile([0.25, 0.5, 0.75])).rename_axis([None], axis=1)
0.25 0.50 0.75
group
control 1.0 1.0 4.0
treatment 2.0 5.0 12.0
答案 2 :(得分:0)
您可能要检查describe
df.groupby('group').describe().stack()