Вы можете рассчитать количество отсчетов для каждого значения с помощью pd.Series.value_counts
, а затем идентифицировать подсчеты ниже предела.Затем используйте pd.DataFrame.loc
с логическим индексированием:
counts = df['variable'].value_counts()
idx = counts[counts.lt(10)].index
df.loc[df['variable'].isin(idx), 'A'] = 'Others'
В общем, вам следует избегать apply
+ lambda
, так как это не векторизация и чуть больше, чем тонко завуалированная петля.Вот рабочий пример с числовыми данными и добавленными столбцами для демонстрации логики:
np.random.seed(0)
arr = np.random.randint(0, 12, 100)
df = pd.DataFrame({'A': arr, 'B': arr})
counts = df['A'].value_counts()
idx = counts[counts.lt(10)].index
df['counts'] = df['A'].map(counts)
df.loc[df['A'].isin(idx), 'B'] = -1
print(df)
A B counts
0 5 -1 9
1 0 -1 9
2 3 3 14
3 11 -1 5
4 3 3 14
5 7 7 10
6 9 -1 9
7 3 3 14
8 5 -1 9
9 2 -1 5
10 4 4 13