2016-09-27 4 views
2

次のことを行うことができます(最小限のコードの意味での)より良い方法があります:それは多少この道を行く必要がありますので列挙の数値に列を変換します。列挙辞書のキーと値の列のデータを変換する

  1. の代わりにキーと値の結果を使用して値を持つキーを戻す
  2. キー値
  3. enumrated辞書を作る列に項目のを設定してもらいます新しい列のデータ

だからここに誰もが私は関数にget_color_valを書いて避けることができることを行うための古典的な方法を示すことができる場合、私は今日と不思議仕事だ:

import pandas as pd 
cars = pd.DataFrame({"car_name": ["BMW","BMW","ACCURA","ACCURA","ACCURA","BMW","BMW","BMW"],"color":["RED","RED","RED","RED","GREEN","BLACK","BLUE","BLUE"]}) 

color_dict = dict(enumerate(set(cars["color"]))) 
color_dict = dict((y,x) for x,y in color_dict.iteritems()) 

def get_color_val(row): 
    my_key = row["color"] 
    my_value = color_dict.get(my_key) 
    return my_value 

cars["color_val"] = cars.apply(get_color_val, axis=1) 
cars = cars.drop("color",1) 
print cars 

結果

Before------------ 
car_name color 
0  BMW RED 
1  BMW RED 
2 ACCURA RED 
3 ACCURA RED 
4 ACCURA GREEN 
5  BMW BLACK 
6  BMW BLUE 
7  BMW BLUE 


After------------ 
car_name color_val 
0  BMW   3 
1  BMW   3 
2 ACCURA   3 
3 ACCURA   3 
4 ACCURA   2 
5  BMW   1 
6  BMW   0 
7  BMW   0 

答えて

3

この場合、pd.factorize()を使用します。

In [8]: cars['color_val'] = pd.factorize(cars.color)[0] 

In [9]: cars 
Out[9]: 
    car_name color color_val 
0  BMW RED   0 
1  BMW RED   0 
2 ACCURA RED   0 
3 ACCURA RED   0 
4 ACCURA GREEN   1 
5  BMW BLACK   2 
6  BMW BLUE   3 
7  BMW BLUE   3 
+0

1行に?!?!?!うわー、ありがとう! – adhg

+0

@adhg、ええ、パンダを愛するもう一つの理由...;) – MaxU

関連する問題