删除值计数小于95%的记录

2024-04-28 20:10:20 发布

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

我要删除所有那些值计数小于95%的记录。目前,我正在静态地为值计数<;=5执行此操作,但我只想保留值计数的前95个百分位。我该怎么弄到?这里的部分也是绝对的。你知道吗

vc = repair['PART_NO'].value_counts()
u  = [i not in set(vc[vc<=5].index) for i in repair['PART_NO']]
repair = repair[u]
repair.describe(include="all")

Tags: noinltindexvalue记录静态not
2条回答

我想保留第95个百分位数而不是百分位数。 因此,解决方案是:

获取每个部件号的频率并将其添加到数据帧中

repair['FREQ'] = \ repair.groupby('PART_NO', as_index=False)['PART_NO'].transform(lambda s: s.count()) repair.head()

过滤出修复行修理频率大于或等于第95百分位:19600

repair = repair[repair.FREQ < repair.FREQ.quantile(.95)]

也许我理解你的问题错了,让我们举个例子。代码如下:

# in the below list, the num 1 have percentile > 95
lst = [1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
count = len(lst) * 1.0

# test for each num percentile compute
print [[x, lst.count(x) / count] for x in set(lst)]
# [[1, 0.9545454545454546], [2, 0.045454545454545456]]

# remove percentile < 95
ret_lst = [[x, lst.count(x) / count] for x in set(lst) if lst.count(x) / count >= 0.95]
print ret_lst
# [[1, 0.9545454545454546]]

# get the item whose percentile > 95
lst_final = [item[0] for item in ret_lst]
print lst_final
# [1]

上述lst中的元素可以是str或其他type。例如:

# the lst can have any type, like int, str in the below
# in the below list, the 'a' have percentile > 95
lst = ['a', 'b', 1, 0, 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a',
       'a', 'a', 'a', 'a', 'a', 'a', 'a',
       'a', 'a', 'a', 'a', 'a', 'a',
       'a', 'a', 'a', 'a', 'a', 'a',
       'a', 'a', 'a', 'a', 'a', 'a',
       'a', 'a', 'a', 'a', 'a', 'a',
       'a', 'a', 'a', 'a', 'a', 'a',
       'a', 'a', 'a', 'a', 'a', 'a',
       'a', 'a', 'a', 'a', 'a', 'a']

count = len(lst) * 1.0

# test for each elements percentile compute
print [[x, lst.count(x) / count] for x in set(lst)]
# [['a', 0.9508196721311475], [1, 0.01639344262295082], ['b', 0.01639344262295082], [0, 0.01639344262295082]]

# remove percentile < 95
ret_lst = [[x, lst.count(x) / count] for x in set(lst) if lst.count(x) / count >= 0.95]
print ret_lst
# [['a', 0.9508196721311475]]

lst_final = [item[0] for item in ret_lst]
print lst_final
# ['a']

相关问题 更多 >