【问题标题】:pandas group by aggregate with Q1 and Q3pandas 按 Q1 和 Q3 分组
【发布时间】:2020-01-21 06:44:26
【问题描述】:

我有一个从这个命令生成的示例数据集

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

【问题讨论】:

    标签: python pandas dataframe group-by aggregate


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-25
      • 2020-05-13
      • 2020-09-16
      • 2015-07-31
      • 2021-10-16
      相关资源
      最近更新 更多