gpt4 book ai didi

python - 如何在 Python 中查找组内每一行的加权百分位数?

转载 作者:行者123 更新时间:2023-12-01 06:51:45 25 4
gpt4 key购买 nike

假设我有以下数据框。最后一列是我需要的,其余列是我所拥有的。类别内的百分位计算为价格的加权百分位数,权重为该类别内销售的商品数量

| Category   |    Price    |  Items Sold  |  Percentile within category|
|:-----------|------------:|:------------:|:--------------------------:|
| A | 560 | 5 | 92.56 |
| A | 360 | 2 | 12.56 |
| B | 510 | 3 | 42.56 |
| A | 520 | 4 | 72.36 |
| B | 960 | 6 | 91.56 |
| C | 130 | 2 | 100.00 |

我需要使用的函数是stats.percentileofscore。但我不知道如何使用它。

编辑:插入数据框的图像,因为不确定如何显示表格

Edit2:我还没有精确计算所有行的输出值。对于 A-560,应为 81.81%

stats.percentileofscore([560,560,560,560,560,360,360,520,520,520,520], 560)

给出 81.81%

The dataframe

最佳答案

您可以通过简单的分组并应用函数来获取加权值来完成此操作

data = {'Category' : ['A', 'A', 'B', 'A', 'B', 'C'],
'Price' : [560, 360, 510, 520, 960, 130],
'Items' : [5, 2, 3, 4, 6, 2]}

df = pd.DataFrame(data).sort_values('Category')
def fun(x):
t = (x['Price'] * x['Items']).sum()
return (x['Price'] * x['Items'])/t
df['weighted'] = df.groupby('Category').apply(fun).values

一定有更好的方法,因为这取决于排序顺序是否正确。也许有人会介入并给出更好的解决方案。

结果:

  Category  Price  Items  weighted
0 A 560 5 0.500000
1 A 360 2 0.128571
3 A 520 4 0.371429
2 B 510 3 0.209877
4 B 960 6 0.790123
5 C 130 2 1.000000

关于python - 如何在 Python 中查找组内每一行的加权百分位数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58959741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com