2016-04-10 2 views
1

В моем наборе данных есть один столбец с большим количеством уникальных значений (тип объекта). Я считаю, что некоторые из них незначительны (если они не нужны), и поэтому я хочу группировать уровни, если они находятся под определенным определенным порогом. Я преобразовал столбец в категориальные значения с модулем кодера метки, тогда я хочу объединить те категории, у которых число меньше заданного порога. Итак, для этого набора образцов, который я подготовил, если общее число (freq) определенного класса в столбце «bin» равно или меньше 2, чем оно получит новые значения в столбце «new_bins» для «o» вместо , Итак, bin ('c', 'd') будет изменен в 'new_bins' на 'o'.python grouping аналогичные категориальные значения

id | bin | new_bins 
======== ================= 
    1  a  a 
    2  a  a 
    3  b  b 
    4  c  o 
    5  b  b 
    6  a  a 
    7  b  b 
    8  a  a 
    9  c  o 
    10  a  a 
    11  d  o 
    12  d  o 

df.groupby(['bin'], sort=True).count()) 

Это одна строка кода, которую я пробовал, но она не достигает того, что я хочу. Я знаю, что это немного нечеткое, поскольку у меня нет кода. Я думал, что этот вопрос относится к ящикам, но, возможно, его называют чем-то другим, я не могу оштрафовать похожий пример. В соревнованиях по кагглу он назывался сочетанием уровней. Возможно, просто называть термин или фразу, которую я должен искать, также поможет.

ответ

1

Это должно помочь вам:

In [127]: df 
Out[127]: 
    id bin new_bins 
0 1 a  a 
1 2 a  a 
2 3 b  o 
3 4 c  o 
4 5 b  o 
5 6 a  a 
6 7 b  o 
7 8 a  a 
8 9 c  o 
9 10 a  a 

группирует элементы:

In [128]: dfg = df.groupby('bin').count() 

In [129]: dfg 
Out[129]: 
    id new_bins 
bin 
a  5   5 
b  3   3 
c  2   2 

Для выбора элементов, которая удовлетворяет условию

In [130]: dfg[dfg['id'] > 2] 
Out[130]: 
    id new_bins 
bin 
a  5   5 
b  3   3 

In [143]: val = dfg[dfg['id'] <= 2] 

In [144]: val 
Out[144]: 
    id new_bins 
bin 
c  2 MODIFIED 

Для изменения значения столбца, соответствует условию

In [147]: df.loc[df['bin'] == val.index[0], 'new_bins'] = 'MOD' 

In [148]: df 
Out[148]: 
    id bin new_bins 
0 1 a  a 
1 2 a  a 
2 3 b  o 
3 4 c  MOD 
4 5 b  o 
5 6 a  a 
6 7 b  o 
7 8 a  a 
8 9 c  MOD 
9 10 a  a 
+0

похоже, что он должен работать. Я буду держать вас в курсе. – OAK

Смежные вопросы