我有一个从这个命令生成的示例数据集
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 需要解析输入数组和阈值。 我可以有你的建议如何获得预期的输出吗? 我想应用于相当大的真实数据。 谢谢。
将DataFrameGroupBy.quantile
与Series.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