说我在Pandas中有以下DataFrame:
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
和values
)(不仅仅是截止点)。我怎么能这样做?
答案 0 :(得分:1)
好的,所以我对分位数的理解有限,所以你可能需要对此进行改进,但在我看来你想要做的是以下内容:
DataFrame.quantile()
方法为此,您可以对数据进行分组并使用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})
您可以按如下方式编写函数:
def quantile_function(df, quantile_point, col = 'value'):
#Get the quantile value
quantile_value = df.quantile(quantile_point)[col]
#Select the data in the group that falls at or below the quantile value and return it
return df[df[col] <=quantile_value]
然后使用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
这是你想要的吗?