【问题标题】:Quartiles calculations and classifications filtering by product按产品筛选的四分位数计算和分类
【发布时间】:2021-09-29 15:47:38
【问题描述】:

我很难做到这一点:

我有什么:熊猫数据框:

product   seller   price
   A        Yo      10
   A        Ka      5
   A        Poy     7.5
   A        Nyu     2.5
   A        Poh     1.25
   B        Poh     11.25

我想要什么:

给定一个类似上面product, seller, price的df,我想根据该特定产品的价格列计算4个四分位数,并将该产品的每个卖家的价格分类到这些四分位数中。

当所有价格都相同时,4 个四分位数的值相同,价格被归类为第 1 个四分位数

预期输出:

product   seller   price   Quartile   1Q     2Q      3Q      4Q
   A        Yo      10        4       2.5    5       7.5     10
   A        Ka      5         2       2.5    5       7.5     10
   A        Poy     7.5       3       2.5    5       7.5     10
   A        Nyu     2.5       1       2.5    5       7.5     10
   A        Poh     1.25      1       2.5    5       7.5     10
   B        Poh     11.25     1       11.25  11.25  11.25    11.25

到目前为止我做了什么:

如果我使用:df['Price'].quantile([0.25,0.5,0.75,1]),它将计算所有价格的 4 个四分位数而不按产品过滤,所以它是错误的。

我迷路了,因为我不知道如何在 python 中执行此操作。
任何人都可以在这里给我一些启示吗? 谢谢

@Hamza,看看下面的输出。还是有一些东西不能正常工作

【问题讨论】:

    标签: python-3.x pandas numpy


    【解决方案1】:

    试试:

    dfQuantile = df.groupby("product")['Price'].quantile([0.25,0.5,0.75,1]).unstack().reset_index().rename(columns={0.25:"1Q",0.5:"2Q",0.75:"3Q",1:"4Q"})
    out = pd.merge(df,dfQuantile,on="product",how="left")
    out["Quantile"] = df.groupby(['product'])['Price'].transform(
                         lambda x: pd.qcut(x, 4, labels=False, duplicates="drop")).fillna(0).add(1)
    
    print(out)
    
    
      product   seller  Price   Quantile    1Q       2Q      3Q      4Q
    0   A        Yo     10.00   4           2.50    5.00    7.50    10.00
    1   A        Ka     5.00    2           2.50    5.00    7.50    10.00
    2   A        Poy    7.50    3           2.50    5.00    7.50    10.00
    3   A        Nyu    2.50    1           2.50    5.00    7.50    10.00
    4   A        Poh    1.25    1           2.50    5.00    7.50    10.00
    5   B        Poh    11.25   1           11.25   11.25   11.25   11.25
    

    【讨论】:

    • 它的工作原理几乎完美。缺少一点:我需要将给定价格实际分类为 1st、2nd..4thQ 的“四分位”列
    • 检查更新的代码。补充说。
    • 现在是 99.9% xD,当所有四分位数都相同时,我想归类为 1Q。您将代码归类为 4Q,但我可以忍受那个 xD - 非常感谢伙计;)
    • 再次更新。现在它将为您工作 100%..
    • 谢谢伙计。你帮了很多xD
    猜你喜欢
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 2020-06-06
    • 2021-01-07
    • 2021-12-26
    相关资源
    最近更新 更多