Na pandasowej ramce danych wiem, że mogę grupować jedną lub więcej kolumn, a następnie filtrować wartości, które występują więcej/mniej niż podana liczba.Pandy: filtruj ramkę danych dla wartości, które są zbyt częste lub zbyt rzadkie.
Ale chcę to zrobić w każdej kolumnie na ramce danych. Chcę usunąć wartości, które są zbyt rzadkie (powiedzmy, że występują mniej niż 5% razy) lub zbyt często. Jako przykład można rozważyć ramkę danych z następującymi kolumnami: 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
Jeśli jest to duża dataframe, ma sens, aby usunąć wiersze, które mają fałszywe przedmioty, na przykład, jeśli time of day = night
występuje tylko 3% czasu, lub jeśli foot
środek transportu jest rzadkie, i tak dalej .
Chcę usunąć wszystkie takie wartości ze wszystkich kolumn (lub listy kolumn). Jednym z pomysłów jest wykonanie value_counts
w każdej kolumnie, transform
i dodanie jednej kolumny dla każdego value_counts; następnie filtruj na podstawie tego, czy są powyżej czy poniżej progu. Ale myślę, że musi być lepszy sposób na osiągnięcie tego?
Spójrz sklearn wykrywania funkcji – Moritz