Su un dataframe panda, so che posso raggruppare su una o più colonne e quindi filtrare i valori che si verificano più o meno di un dato numero.Panda: filtro dataframe per valori troppo frequenti o troppo rari
Ma voglio farlo su ogni colonna del dataframe. Voglio rimuovere i valori che sono troppo rari (diciamo che si verificano meno del 5% delle volte) o troppo frequenti. Ad esempio, considera un dataframe con le seguenti colonne: 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
Se questo è un grande dataframe, ha senso per rimuovere le righe che contengono elementi spuri, ad esempio, se time of day = night
verifica solo il 3% del tempo, oppure se foot
modalità di trasporto è raro, e così via .
Voglio rimuovere tutti questi valori da tutte le colonne (o da un elenco di colonne). Un'idea che ho è di fare un value_counts
su ogni colonna, transform
e aggiungere una colonna per ogni value_counts; quindi filtrare in base al fatto che siano sopra o sotto una soglia. Ma penso che ci debba essere un modo migliore per raggiungere questo obiettivo?
Date un'occhiata a sklearn funzione di rilevamento – Moritz