我可以从 15 个对象变量转到一个最终的二进制目标变量吗?
这 15 个变量有大约 10.000 个不同的代码,我的数据集大约有 21.000.000 条记录。我想要做的是首先用 1 替换我想要的代码,另一个用 0 替换,然后如果十五个变量中的一个为 1,则目标变量将为 1,如果所有十五个变量均为 0,则目标变量将为 0。
我曾尝试使用 to_replace、as_type、to_numeric、infer_objects,但效果不佳,例如我的数据集看起来像这样的 head(5):
D P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 P11 P12 P13 P14 P15
41234 1234 4367 874 NAN NAN NAN 789 NAN NAN NAN NAN NAN NAN NAN NAN
42345 7657 4367 874 NAN NAN NAN 789 NAN NAN NAN NAN NAN NAN NAN NAN
34212 7654 4347 474 NAN NAN NAN 789 NAN NAN NAN NAN NAN NAN NAN NAN
34212 8902 4317 374 NAN 452 NAN 719 NAN NAN NAN NAN NAN NAN NAN NAN
19374 2564 4387 274 NAN 452 NAN 799 NAN NAN NAN NAN NAN NAN NAN NAN
我想将所有 nan 转换为 0,并将所选代码转换为 1,因此所有 P1-P15 都将是二进制的,我将用它们创建最终的 P 变量。
例如,如果 P1-P15 有 '3578'、'9732'、'4734'...(我使用大约 200 个代码)我想成为 1。我想成为 0 的所有其他值。D 变量应该保持不变是。最终数据集将是 (D,P),然后我将添加训练变量
有任何想法吗?以下代码给了我错误的结果。
selCodes=['3722','66']
dfnew['P']=(dfnew.loc[:,'PR1':].astype(str).isin(selCodes).any(axis=1).astype(int))
看一下测试数据集(左)和新的 P(右)。示例代码 3722 P 应该是 1。