Làm thế nào để mã hóa nhị phân biến phân loại đa giá trị từ khung dữ liệu Pandas?


9

Giả sử chúng ta có khung dữ liệu sau với nhiều giá trị cho một cột nhất định:

    categories
0 - ["A", "B"]
1 - ["B", "C", "D"]
2 - ["B", "D"]

Làm thế nào chúng ta có thể có được một bảng như thế này?

   "A"  "B"  "C"  "D"
0 - 1    1    0    0
1 - 0    1    1    1
2 - 0    1    0    1

Lưu ý: Tôi không nhất thiết cần một khung dữ liệu mới, tôi đang tự hỏi làm thế nào để chuyển đổi các DataFrames đó sang định dạng phù hợp hơn cho việc học máy.

Câu trả lời:


7

Nếu [0, 1, 2]là nhãn số và không phải là chỉ mục, thì pandas.DataFrame.pivot_tablehoạt động:

Trong []:
data = pd.DataFrame.from_records (
    [[0, 'A'], [0, 'B'], [1, 'B'], [1, 'C'], [1, 'D'], [2, 'B'], [ 2, 'D']],
    cột = ['number_label', 'thể loại'])
data.pOLL_table (index = ['number_label'], Cột = ['category'], aggfunc = [len], fill_value = 0)
Ngoài[]:
              len
loại ABCD
số_label                       
0 1 1 0 0
1 0 1 1 1
2 0 1 0 1

Bài đăng trên blog này rất hữu ích: http://pbpython.com/pandas-pOLL-table-explained.html


Nếu [0, 1, 2]là chỉ mục, thì collections.Counterhữu ích:

Trong []:
data2 = pd.DataFrame.from_dict (
    {'loại': {0: ['A', 'B'], 1: ['B', 'C', 'D'], 2: ['B', 'D']}})
data3 = data2 ['chuyên mục']. áp dụng (bộ sưu tập. Bộ đếm)
pd.DataFrame.from_records (data3) .fillna (value = 0)
Ngoài[]:
       A B C D
0 1 1 0 0
1 0 1 1 1
2 0 1 0 1

Cảm ơn, tôi sẽ kiểm tra nó. Trên thực tế, 0, 1 và 2 là chỉ số. Ngoài ra, bạn có biết làm thế nào thưa thớt có thể được xử lý hiệu quả ở đây vì có rất nhiều số không?
LDGN

Cả gấu trúc và scipy đều có cấu trúc dữ liệu thưa thớt ( gấu trúc thưa thớt , thưa thớt ) để tiết kiệm bộ nhớ, nhưng chúng có thể không được thư viện máy học bạn sử dụng. Nếu kích thước của vấn đề của bạn (số lượng cột) lớn đến mức cần phải có biểu diễn thưa thớt, bạn có thể muốn xem xét sử dụng các kỹ thuật giảm kích thước .
Samuel Mitchold
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.