Bagaimana cara biner mengkodekan variabel kategorikal multi-dihargai dari Pandaf dataframe?


9

Misalkan kita memiliki kerangka data berikut dengan beberapa nilai untuk kolom tertentu:

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

Bagaimana kita bisa mendapatkan meja seperti ini?

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

Catatan: Saya tidak perlu memerlukan kerangka data baru, saya ingin tahu bagaimana mengubah DataFrame tersebut ke format yang lebih cocok untuk pembelajaran mesin.

Jawaban:


7

Jika [0, 1, 2]label numerik dan bukan indeks, maka pandas.DataFrame.pivot_tableberfungsi:

Di []:
data = pd.DataFrame.from_records (
    [[0, 'A'], [0, 'B'], [1, 'B'], [1, 'C'], [1, 'D'], [2, 'B'], [ 2, 'D']],
    kolom = ['number_label', 'category'])
data.pivot_table (indeks = ['number_label'], kolom = ['kategori'], aggfunc = [len], fill_value = 0)
Di luar[]:
              len
kategori ABCD
number_label                       
0 1 1 0 0
1 0 1 1 1
2 0 1 0 1

Posting blog ini bermanfaat: http://pbpython.com/pandas-pivot-table-explained.html


Jika [0, 1, 2]indeks, maka collections.Counterberguna:

Di []:
data2 = pd.DataFrame.from_dict (
    {'kategori': {0: ['A', 'B'], 1: ['B', 'C', 'D'], 2: ['B', 'D']}})
data3 = data2 ['kategori']. berlaku (collections.Counter)
pd.DataFrame.from_records (data3) .fillna (nilai = 0)
Di luar[]:
       ABCD
0 1 1 0 0
1 0 1 1 1
2 0 1 0 1

Terima kasih, saya akan memeriksanya. Sebenarnya 0, 1, dan 2 adalah indeks. Juga, apakah Anda tahu bagaimana kesederhanaan dapat ditangani secara efisien di sini karena ada banyak nol?
Denis L

Baik panda maupun scipy memiliki struktur data yang jarang ( panda sparse , scipy sparse ) untuk menghemat memori, tetapi mereka mungkin tidak didukung oleh pustaka pembelajaran mesin yang Anda gunakan. Jika dimensi masalah Anda (jumlah kolom) sangat besar sehingga diperlukan representasi yang jarang, Anda mungkin ingin mempertimbangkan juga menggunakan teknik pengurangan dimensi .
Samuel Harrold
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.