我有一个像这样的熊猫数据框(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 列中的特定行中,则将有一个值为 1 或 0 的列 25041。我正在使用此代码,当行数较少时它可以工作。
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 等。知道如何改进上述逻辑吗?