ฉันมีกรอบข้อมูลแพนด้า (X11) เช่นนี้: ในความเป็นจริงฉันมี 99 คอลัมน์จนถึง dx99
dx1 dx2 dx3 dx4
0 25041 40391 5856 0
1 25041 40391 25081 5856
2 25041 40391 42822 0
3 25061 40391 0 0
4 25041 40391 0 5856
5 40391 25002 5856 3569
ฉันต้องการสร้างคอลัมน์เพิ่มเติมสำหรับค่าของเซลล์เช่น 25041,40391,5856 เป็นต้นดังนั้นจะมีคอลัมน์ 25041 ที่มีค่าเป็น 1 หรือ 0 หาก 25041 เกิดขึ้นในแถวนั้นในคอลัมน์ dxs ใด ๆ ฉันใช้รหัสนี้และใช้งานได้เมื่อจำนวนแถวน้อยลง
mat = X11.as_matrix(columns=None)
values, counts = np.unique(mat.astype(str), return_counts=True)
for x in values:
X11[x] = X11.isin([x]).any(1).astype(int)
ฉันได้รับผลเช่นนี้:
dx1 dx2 dx3 dx4 0 25002 25041 25061 25081 3569 40391 42822 5856
25041 40391 5856 0 0 0 1 0 0 0 1 0 1
25041 40391 25081 5856 0 0 1 0 1 0 1 0 1
25041 40391 42822 0 0 0 1 0 0 0 1 1 0
25061 40391 0 0 0 0 0 1 0 0 1 0 0
25041 40391 0 5856 0 0 1 0 0 0 1 0 1
40391 25002 5856 3569 0 1 0 0 0 1 1 0 1
เมื่อจำนวนแถวเป็นหลายพันหรือเป็นล้านมันจะหยุดและใช้ตลอดไปและฉันจะไม่ได้รับผลใด ๆ โปรดดูว่าค่าของเซลล์นั้นไม่ซ้ำกันกับคอลัมน์แทนที่จะทำซ้ำในหลายคอลัมน์ ตัวอย่างเช่น 40391 เกิดขึ้นใน dx1 เช่นเดียวกับใน dx2 และอื่น ๆ สำหรับ 0 และ 5856 เป็นต้นความคิดใดที่จะปรับปรุงตรรกะดังกล่าวข้างต้น?