如何计算部分聚合数据的统计数据

问题描述 投票:0回答:1

我正在尝试分析一些订单项数据。

这是一个非常简化的示例:

df = pd.DataFrame({
    'quantity':[3,4,1],
    'unit_cost':[50,80,60]
})
df
    quantity    unit_cost
0   3   50
1   4   80
2   1   60

我想计算每个单位的统计数据,包括中位数。对于此示例,中位数为 70。

有没有办法在不先分解数量的情况下做到这一点?

我尝试像下面这样分解每一行,但实际数据的资源需求非常大。

disagDf
    quantity    unit_cost
0   1   50
0   1   50
0   1   50
1   1   80
1   1   80
1   1   80
1   1   80
2   1   60
python pandas numpy statistics
1个回答
0
投票

IIUC 你可以做:

# https://stackoverflow.com/a/73905572/10035985
def weighted_quantiles_interpolate(values, weights, quantiles=0.5):
    i = np.argsort(values)
    c = np.cumsum(weights[i])
    q = np.searchsorted(c, quantiles * c[-1])
    return np.where(
        c[q] / c[-1] == quantiles, 0.5 * (values[i[q]] + values[i[q + 1]]), values[i[q]]
    )


df = pd.DataFrame({"quantity": [3, 4, 1], "unit_cost": [50, 80, 60]})

print(
    weighted_quantiles_interpolate(
        df["unit_cost"].values, weights=df["quantity"].values
    )
)

打印:

70.0
© www.soinside.com 2019 - 2024. All rights reserved.