2016-06-29 33 views
16

Giả sử tôi có một dataframe với các nước mà đi như:Pandas: chuyển đổi loại đến các số

cc | temp 
US | 37.0 
CA | 12.0 
US | 35.0 
AU | 20.0 

Tôi biết rằng có một pd.get_dummies chức năng để chuyển đổi các nước để 'mã hóa một nóng'. Tuy nhiên, tôi muốn chuyển đổi chúng thành chỉ mục thay vào đó, thay vào đó tôi sẽ nhận được cc_index = [1,2,1,3].

Tôi giả định rằng có một cách nhanh hơn bằng cách sử dụng get_dummies cùng với một mệnh đề where NumPy như hình dưới đây:

[np.where(x) for x in df.cc.get_dummies().values]

Đây là phần nào dễ dàng hơn để làm trong R sử dụng 'yếu tố' quá Tôi hy vọng gấu trúc có cái gì đó tương tự.

+0

Bạn có nghĩa là 'cc_ind ex = [0,1,0,2] '? –

+0

chắc chắn, quên chỉ số python 0 –

+0

Loạt danh mục hoặc cột trong một DataFrame có thể hữu ích. – min2bro

Trả lời

44

Thứ nhất, thay đổi kiểu của cột:

df.cc = pd.Categorical(df.cc) 

Bây giờ các dữ liệu tìm kiếm tương tự nhưng được lưu trữ khoát. Để nắm bắt được mã chủng loại:

df['code'] = df.cc.cat.codes 

Bây giờ bạn có:

cc temp code 
0 US 37.0  2 
1 CA 12.0  1 
2 US 35.0  2 
3 AU 20.0  0 

Nếu bạn không muốn thay đổi DataFrame của bạn, nhưng chỉ đơn giản là có được mã số:

df.cc.astype('category').cat.codes 

Hoặc sử dụng cột phân loại làm chỉ mục:

df2 = pd.DataFrame(df.temp) 
df2.index = pd.CategoricalIndex(df.cc) 
Các vấn đề liên quan