питоническая условная агрегация - PullRequest
1 голос
/ 23 марта 2019

У меня большой Dataframe с> 3000 метками категорий. Я хотел бы выборочно перекодировать метки на основе количества групп. Это похоже на условную замену в Excel. Например:

ID Label   
1  cat  
2  dog  
3  cat  
4  cat  
5  dog  
6  bird 

количество каждого:

cat: 3  
dog: 2  
bird: 1   

логика: если count <= 2, то поменяйте метку на 'other' </p>

ID Label   
1  cat  
2  other  
3  cat  
4  cat  
5  other  
6  other  

количество каждого:

cat: 3  
other: 3  

Возможно, некоторые из вас знают более питонский способ сделать то же самое. может быть, таинственная лямбда-функция может помочь ...

уже прочитал кучу постов здесь, как обычно.

Мой скудный код Python выглядит так:

df['Label'] = df.groupby('Label')['Label'].transform('count')
df['New_Label'] = np.where(df.label <= 2, 'other', df.label)

1 Ответ

1 голос
/ 23 марта 2019

Этот код использует pd.DataFrame.where() вместо np.where() и делает это в одной строке:

df.Label = df.Label.where(df.groupby('Label')['Label'].transform('count') > 2, 'other')
print(df)
     Label
ID       
1      cat
2    other
3      cat
4      cat
5    other
6    other
...