Tôi có khung dữ liệu gấu trúc (X11) như thế này: Thực tế tôi có 99 cột lên đến 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
Tôi muốn tạo (các) cột bổ sung cho các giá trị ô như 25041,40391,5856, v.v. Vì vậy, sẽ có một cột 25041 với giá trị là 1 hoặc 0 nếu 25041 xảy ra trong hàng cụ thể đó trong bất kỳ cột dxs nào. Tôi đang sử dụng mã này và nó hoạt động khi số lượng hàng ít hơn.
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)
Tôi nhận được kết quả như thế này:
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
Khi số lượng hàng là hàng ngàn hoặc hàng triệu, nó bị treo và mất mãi mãi và tôi không nhận được bất kỳ kết quả nào. Vui lòng xem các giá trị ô không phải là duy nhất cho cột, thay vào đó lặp lại trong nhiều cột. Đối với ex, 40391 đang xảy ra trong dx1 cũng như trong dx2 và cứ thế cho 0 và 5856, v.v ... Bạn có ý tưởng nào để cải thiện logic được đề cập ở trên không?