熊猫按Q1和Q3分组

时间:2020-01-21 06:44:26

标签: python pandas dataframe group-by aggregate

我有一个根据此命令生成的样本数据集

df = pd.DataFrame({"A": list(range(1, 21))}, "B": ["a"]*10 + ["b"]*10})

所以,我的数据看起来像这样

A   B
1   a
2   a
3   a
4   a
5   a
6   a
7   a
8   a
9   a
10  a
11  b
12  b
13  b
14  b
15  b
16  b
17  b
18  b
19  b
20  b

我想按列B获取第一分位数(Q1)和第三分位数(Q3)的输出。预期输出应为

B     Q1     Q3
a   3.25   7.75
b  13.25  17.75

我试图按汇总进行分组

df.groupby("B").agg({"A": np.quantile(0.25), "A": np.quantile(0.75)})

但它不起作用,因为np.quantile要求解析输入数组和阈值。请问您如何获得预期的输出?我想将其应用于相当大的真实数据。非常感谢。

1 个答案:

答案 0 :(得分:0)

DataFrameGroupBy.quantileSeries.unstack一起使用并重命名列:

df1 = (df.groupby("B")['A']
         .quantile([0.25, 0.75])
         .unstack()
         .rename(columns={0.25:'Q1', 0.75:'Q3'}))
print (df1)
      Q1     Q3
B              
a   3.25   7.75
b  13.25  17.75
相关问题