检索大Pandas每组的第k个分位数

2024-10-04 05:24:47 发布

您现在位置:Python中文网/ 问答频道 /正文

假设Pandas中有以下数据帧:

                                        value
store          code
I1             AS10937               0.018868
               AS12711               0.002250
               AS12890               0.000229
               AS12914               0.000142
               AS12933               0.000532
I2             AP1001-404563         0.021739
               AP1001-404585         0.002503
               AP1001-439869         0.060000
               AP1001-441215         0.083333
               AP1001-445883         0.014493
I3             CW501555              0.009650
               CW501676              0.002222
I4             PB25015               0.000695
               PB25393               0.001806
               PB25571               0.022690
               PB25633               0.000431
I5             YH141208              0.000705
               YH167493              0.001292
               YH23351               0.001841
               YH257455              0.000772
               YH26109               0.004845
I6             RB10043               0.014806
               RB10045               0.023114
               RB10055               0.002543
               RB10065               0.006810
               RB10109               0.018757

我想检索每个组的底部30%分位数(组是一个存储)。通过检索这个分位数,我的意思是得到它的级数(即codes和{})(而不仅仅是临界点)。我该怎么做?在


Tags: 数据storepandasvaluecodei3位数i1
1条回答
网友
1楼 · 发布于 2024-10-04 05:24:47

好吧,我对分位数的理解有点有限,所以你可能需要改进一下,但在我看来,你想做的是:

  • 按存储对数据分组
  • 对于每个组,使用DataFrame.quantile()方法找到0.3分位数值
  • 返回该组中低于或等于0.3分位数值的数据

为此,您需要对数据进行分组,并使用apply方法应用一个执行上述操作的函数。在

因此,鉴于这些数据:

import pandas as pd
store = ['I1', 'I1', 'I1', 'I1', 'I1', 
         'I2', 'I2', 'I2', 'I2', 'I2', 
         'I3', 'I3',
         'I4', 'I4', 'I4', 'I4',
         'I5', 'I5', 'I5', 'I5', 'I5', 
         'I6', 'I6', 'I6', 'I6',  'I6'] 
code =  ['AS10937 ', 'AS12711 ', 'AS12890 ', 'AS12914 ', 'AS12933 ', 
         'AP1001-404563 ', 'AP1001-404585 ', 'AP1001-439869 ', 'AP1001-441215 ', 'AP1001-445883 ', 
         'CW501555', 'CW501676', 
         'PB25015', 'PB25393', 'PB25571', 'PB25633', 
         'YH141208', 'YH167493', 'YH23351', 'YH257455', 'YH26109', 
         'RB10043', 'RB10045', 'RB10055', 'RB10065', 'RB10109']      
value = [0.018868, 0.002250, 0.000229, 0.000142, 0.000532, 
         0.021739, 0.002503, 0.060000, 0.083333, 0.014493, 
         0.009650, 0.002222, 
         0.000695, 0.001806, 0.022690, 0.000431, 
         0.000705, 0.001292, 0.001841, 0.000772, 0.004845, 
         0.014806, 0.023114, 0.002543, 0.006810, 0.018757]
DF = pd.DataFrame({'store' : store, 'code' : code, 'value' : value})

您可以编写如下函数:

^{pr2}$

然后使用groupby对象将该函数传递给apply,如下所示:

DF.groupby('store').apply(quantile_function, 0.3)

结果如下:]

                    code store     value
store
I1    2         AS12890     I1  0.000229
      3         AS12914     I1  0.000142
I2    6   AP1001-404585     I2  0.002503
      9   AP1001-445883     I2  0.014493
I3    11        CW501676    I3  0.002222
I4    15         PB25633    I4  0.000431
I5    16        YH141208    I5  0.000705
      19        YH257455    I5  0.000772
I6    23         RB10055    I6  0.002543
      24         RB10065    I6  0.006810

这是你想要的吗?在

相关问题 更多 >