我还没能找到这个具体问题的答案。我有如下数据:
df = pd.DataFrame({'Product': ['Alpha', 'Alpha', 'Alpha', 'Alpha','Alpha', 'Beta', 'Beta', 'Beta','Beta', 'Gamma', 'Gamma', 'Gamma','Delta','Delta','Epsilon','Epsilon','Epsilon','Epsilon'],'Age': [0,1,2,5,8,0,2,3,5,1,3,2,8,5,1,5,4,2],'Quantity': [114,82,15,35,27,63,32,55,87,50,4,22,6,96,94,3,64,110]})
产品中心 | 年龄 | 数量 |
---|---|---|
阿尔法 | 0 | 一百一十四 |
阿尔法 | 1 | 八十二 |
阿尔法 | 二 | 十五岁 |
阿尔法 | 五 | 三十五 |
阿尔法 | 八 | 二十七 |
贝塔 | 0 | 六十三 |
贝塔 | 二 | 三十二 |
贝塔 | 三 | 五十五 |
贝塔 | 五 | 八十七 |
伽玛 | 1 | 五十 |
伽玛 | 三 | 四 |
伽玛 | 二 | 二十二 |
德尔塔 | 八 | 六 |
德尔塔 | 五 | 九十六 |
厄普西隆 | 1 | 九十四 |
厄普西隆 | 五 | 三 |
厄普西隆 | 四 | 六十四 |
厄普西隆 | 二 | 一百一十 |
我要找的是年龄的任意百分位数,按产品细分,假设有数量,e,g。:
| 产品中心|第70百分位数(岁)|第90百分位数(岁)|
| --------------|--------------|--------------|
| 阿尔法|0|二|
| 贝塔|五|五|
| 伽玛|二|二|
| 德尔塔|五|五|
| 厄普西隆|二|四|
2条答案
按热度按时间rn0zuynd1#
您需要通过重复每个年龄段的数量来获得加权百分位数。您可以为此创建自定义函数并将其应用于每个组:
输出:
nx7onnlm2#
这里有一个方法:
np.repeat
应用df.reindex
,列为“数量”。df.groupby
)对数据进行分组,选择列“年龄”,并将.quantile
与您选择的百分位数相结合:[0.7, 0.9]
。level 1
上使用Series.unstack
,并再次应用df.reindex
,这次使用来自df['Product']
(Series.unique
)的唯一值。这将重新建立乘积值的顺序。df.rename
以重命名列,链接df.rename_axis
以删除索引标签。如果你想要整数,链
res.astype(int)
。顺便说一句,你想要的输出包含一个错误。对于“Alpha”,你有70% = 0
和90% = 2
,但它们应该分别是1
和5
。