我有一个这样的熊猫数据框(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出现在任何dxs列中的特定行中,则将有一个值为250或1或0的列。我正在使用此代码,当行数较少时,它可以工作。
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
当行数成千上万时,它会挂起并永久占用,而我没有得到任何结果。请注意,单元格值不是列唯一的,而是在多列中重复。例如,在dx1中以及在dx2中都出现40391,以此类推,例如0和5856等。您知道如何改善上述逻辑吗?
任何想法如何解决这个问题?随着我的数据越来越大,现有的解决方案永远需要生成虚拟列,我仍在等待解决。
—
萨诺伊,2016年