【发布时间】:2015-09-27 00:42:12
【问题描述】:
在 pandas 数据框上,我知道我可以对一个或多个列进行分组,然后过滤出现多于/少于给定数字的值。
但我想对数据框的每一列都执行此操作。我想删除太不频繁(假设发生的次数少于 5%)或太频繁的值。例如,考虑具有以下列的数据框:city of origin, city of destination, distance, type of transport (air/car/foot), time of day, price-interval。
import pandas as pd
import string
import numpy as np
vals = [(c, np.random.choice(list(string.lowercase), 100, replace=True)) for c in
'city of origin', 'city of destination', 'distance, type of transport (air/car/foot)', 'time of day, price-interval']
df = pd.DataFrame(dict(vals))
>> df.head()
city of destination city of origin distance, type of transport (air/car/foot) time of day, price-interval
0 f p a n
1 k b a f
2 q s n j
3 h c g u
4 w d m h
如果这是一个大数据框,则删除包含虚假项目的行是有意义的,例如,如果 time of day = night 仅出现 3% 的时间,或者如果 foot 传输方式很少,等等.
我想从所有列(或列列表)中删除所有此类值。我的一个想法是在每一列 transform 上做一个 value_counts 并为每个 value_counts 添加一列;然后根据它们是否高于或低于阈值进行过滤。但我认为一定有更好的方法来实现这一点?
【问题讨论】:
-
看看sklearn特征检测
标签: python pandas filtering selection