วิธีการเข้ารหัสไบนามิคตัวแปรที่มีค่าหลายค่าจาก Pandas dataframe


9

สมมติว่าเรามีชื่อไฟล์ต่อไปนี้ที่มีหลายค่าสำหรับคอลัมน์ที่แน่นอน:

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

เราจะได้โต๊ะแบบนี้ได้อย่างไร

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

หมายเหตุ: ฉันไม่จำเป็นต้องใช้ดาต้าเฟรมใหม่ฉันสงสัยว่าจะแปลงดาต้าเฟรมดังกล่าวเป็นรูปแบบใดที่เหมาะสมสำหรับการเรียนรู้ของเครื่อง

คำตอบ:


7

หาก[0, 1, 2]เป็นป้ายกำกับตัวเลขและไม่ใช่ดัชนีดังนั้นจึงสามารถใช้pandas.DataFrame.pivot_tableงานได้:

ใน []:
data = pd.DataFrame.from_records (
    [[0, 'A'], [0, 'B'], [1, 'B'], [1, 'C'], [1, 'D'], [2, 'B'], [ 2, 'D']],
    คอลัมน์ = ['number_label', 'หมวดหมู่'])
data.pivot_table (ดัชนี = ['number_label'], คอลัมน์ = ['หมวดหมู่'], aggfunc = [len], fill_value = 0)
ออก[]:
              len
หมวดหมู่ ABCD
number_label                       
0 1 1 0 0
1 0 1 1 1
2 0 1 0 1 1

โพสต์บล็อกนี้มีประโยชน์: http://pbpython.com/pandas-pivot-table-explained.html


หาก[0, 1, 2]เป็นดัชนีแสดงว่าcollections.Counterมีประโยชน์:

ใน []:
data2 = pd.DataFrame.from_dict (
    {'หมวดหมู่': {0: ['A', 'B'], 1: ['B', 'C', 'D'], 2: ['B', 'D']}})
data3 = data2 ['หมวดหมู่'] ใช้ (คอลเลกชันตัวนับ)
pd.DataFrame.from_records (data3) .fillna (value = 0)
ออก[]:
       เอบีซีดี
0 1 1 0 0
1 0 1 1 1
2 0 1 0 1 1

ขอบคุณฉันจะตรวจสอบ ที่จริงแล้ว 0, 1 และ 2 เป็นดัชนี นอกจากนี้คุณมีความคิดใด ๆ ว่าสามารถจัดการความกระจ่างได้อย่างมีประสิทธิภาพที่นี่เนื่องจากมีศูนย์จำนวนมากหรือไม่
เดนิส L

ทั้ง pandas และ scipy มีโครงสร้างข้อมูลแบบกระจาย ( pandas sparse , scipy sparse ) สำหรับการบันทึกหน่วยความจำ แต่อาจไม่ได้รับการสนับสนุนจากไลบรารีการเรียนรู้ของเครื่องที่คุณใช้ หากมิติของปัญหาของคุณ (จำนวนคอลัมน์) ที่มีขนาดใหญ่เพื่อให้การแสดงเบาบางเป็นสิ่งจำเป็นที่คุณอาจต้องการที่จะต้องพิจารณายังมีการใช้เทคนิคการลดมิติ
ซามูเอล Harrold
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.