Pandasのfactorizeが便利すぎる!

はじめに

最近Pandasを勉強しています。
factorizeというのを初めて知りました。
AutoGluonを使ったObject Detectionでは結果がPandas DataFrameで返ってきます。その時にfactorizeが非常に役に立ちます。

   predict_class  predict_score                                       predict_rois
0           head       0.988660  {'xmin': 0.3798920810222626, 'ymin': 0.2936957...  
1           head       0.981958  {'xmin': 0.16018624603748322, 'ymin': 0.251445...  
2           head       0.964868  {'xmin': 0.7895624041557312, 'ymin': 0.1375325...  
3           head       0.962894  {'xmin': 0.5869008302688599, 'ymin': 0.2351982...  
4           head       0.299219  {'xmin': 0.5046889185905457, 'ymin': 0.4765846...  
..           ...            ...                                                ...  
84          head       0.058102  {'xmin': 0.1765645295381546, 'ymin': 0.3947232...  
85          head       0.057993  {'xmin': 0.8565279245376587, 'ymin': 0.1774100...  
86          head       0.057855  {'xmin': 0.2825169563293457, 'ymin': 0.3654884...  
87          head       0.057760  {'xmin': 0.2772541344165802, 'ymin': 0.5180094...  
88          head       0.057700  {'xmin': 0.06226371228694916, 'ymin': 0.014346...  

以前の方法

class_names = list(set(selected_result['predict_class']))
class_ids = np.array([class_names.index(i) for i in list(selected_result['predict_class'])])

新たに習得した方法

class_ids , class_names = selected_result['predict_class'].factorize()

これで以前の方法と同じ結果が得られます。返ってくるclass_namesがリストかnumpy arrayかの違いはありますが。

感想

いままでなんとなくスクリプト書いていましたがPandas、Numpy、pillow、matplotlibなど基本から勉強するべきと痛感しました。