python - pandas 按 Q1 和 Q3 聚合进行分组

标签 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 需要解析输入数组和阈值。我可以请您提供如何获得预期输出的建议吗?我想应用于相当大的真实数据。非常感谢。

最佳答案

使用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

关于python - pandas 按 Q1 和 Q3 聚合进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59835498/

相关文章:

python - 使用 .grid() 定位时,如何将小部件放置在 tkinter 窗口的最底部?

python - 获取 SPY 股价

python - 从 pandas 数据框中提取多年三个月系列(冬季)

python - 如何从 Pandas 中的 groupby 对象中选择不同的行

arrays - 如何将长格式(可能稀疏)的 DataFrame 转换为多维 Array 或 NamedArray

python - 用 Python 写一个 TTL 装饰器

python - 使用 Numpy ndarray 进行条件索引

python - 将新行附加到现有数据框

python - 如何比较两个 Pandas DataFrame 并显示 DataFrame 2 中的差异

python - 移动所有列的数据帧值以使其单调递增