我正在尝试计算百分比并删除低于某个百分比的所有行。我已经尝试了分位数方法,但是我想自己编写代码。
#get the frequency of each part number and add it to the dataframe
repair['FREQ'] = \
repair.groupby('PART_NO', as_index=False)['PART_NO'].transform(lambda s: s.count())
repair = repair[['CONFIG_CD','COMPONENT_ISSUE','SOLD_SHIP','SALES_ORG_ID','WARRANTY_TYPE','NOT_SCEN','PART_NO','FREQ']]
在这里,我采用PART_NO
并获取每个部分的频率并将其作为列添加到称为FREQ
的数据帧中。
现在,我想获得FREQ的第95个百分位数,我可以通过将0.95乘以FREQ
的项数+ 1来获得。如下所示:
list=repair['FREQ'].tolist()
index=(len(list)+1)*0.95
index
获取索引后,我要遍历FREQ
列,直到到达索引并获取索引下方和上方的所有行。我被困在这一部分。请帮忙。
示例:
d = {'PART_NO': ['KH661-05782', 'ZD661-05428','CH661-04581','661-07970','661-07299'], 'FREQ': [205, 1763,6563,4769,825]}
df = pd.DataFrame(data=d)
df=df.sort_values(by=['FREQ'], ascending=[True])
list=df['FREQ'].tolist()
index=(len(list)+1)*0.95
index
现在它应该遍历FREQ列以提供与此相同的输出:这意味着它应该在FREQ列中计数,直到到达索引为止,这是我想知道的不使用分位数的方法。
df = df[df.FREQ > df.FREQ.quantile(.95)]