我有一个从此命令生成的示例数据集
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
关于python - pandas 按 Q1 和 Q3 聚合进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59835498/