#python #pandas
Вопрос:
У меня есть df, в котором я заметил, что в некоторых столбцах есть 2 разных значения, однако для одного из значений очень мало вхождений. Например, в столбце col x
у меня есть два значения: 0 или 1. Однако value_counts()
показал мне, что только 2 строки имеют значение 1. Поэтому я хотел бы удалить этот столбец (а не строку).
df["col x"].value_counts()
0.00000 26868
1.00000 2
Name: col x, dtype: int64
Как я могу удалить столбцы из моего фрейма данных, в котором есть только 2 возможных значения, и одно из них имеет очень малое значение (скажем, менее 0,1%)?
Ответ №1:
Вероятно, есть более элегантные решения, но это должно сработать:
check_max_pct = lambda x : x.value_counts().max()/x.value_counts().sum() < 0.998
df = df.loc[:, [check_max_pct(df[col]) for col in df.columns]]
Функция проверяет, составляет ли доминирующее значение в столбце более 99,8% всех значений (может быть скорректировано путем изменения 0.998
значения), поэтому она также должна распространяться на случаи, когда в столбце более двух уникальных значений, но почти все случаи имеет только одно значение.
Ответ №2:
В итоге я получил этот код:
two_dist_vales_cols = df.loc[:, (df.nunique() == 2)].columns
to_drop = []
for col in two_dist_vales_cols:
if (df[col].value_counts(ascending=True).iloc[0]) < 15:
to_drop.append(col)
df.drop(columns=to_drop, axis=1, inplace=True)
Сначала я нахожу столбцы, в которых есть только 2 различных значения. Затем пройдите по ним, подсчитайте значения и проверьте наименьшее из них. Если он ниже порогового значения, я добавляю этот столбец в список столбцов, которые необходимо удалить, а затем удаляю их.