从 15 个对象变量到最终目标变量(0 或 1)
From 15 object variables to final target variable (0 or 1)
我可以从 15 个对象变量变成一个最终二进制目标变量吗?
这 15 个变量有大约 10.000 个不同的代码,我的数据集大约有 21.000.000 条记录。我想做的是首先用 1 替换我想要的代码,将另一个替换为 0,然后如果 15 个变量中的一个是 1,则目标变量将为 1,如果所有 15 个变量均为 0,则目标变量将为 0。
我曾尝试使用 to_replace、as_type、to_numeric、infer_objects 但效果不佳,例如我的数据集看起来像这个头 (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。
IIUC,使用,DataFrame.isin
:
# example select codes
selCodes = ['1234', '9732', '719']
df['P'] = (
df.loc[:, 'P1':].astype(str)
.isin(selCodes).any(axis=1).astype(int)
)
df = df[['D', 'P']]
结果:
D P
0 41234 1
1 42345 0
2 34212 0
3 34212 1
4 19374 0
我可以从 15 个对象变量变成一个最终二进制目标变量吗?
这 15 个变量有大约 10.000 个不同的代码,我的数据集大约有 21.000.000 条记录。我想做的是首先用 1 替换我想要的代码,将另一个替换为 0,然后如果 15 个变量中的一个是 1,则目标变量将为 1,如果所有 15 个变量均为 0,则目标变量将为 0。
我曾尝试使用 to_replace、as_type、to_numeric、infer_objects 但效果不佳,例如我的数据集看起来像这个头 (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。
IIUC,使用,DataFrame.isin
:
# example select codes
selCodes = ['1234', '9732', '719']
df['P'] = (
df.loc[:, 'P1':].astype(str)
.isin(selCodes).any(axis=1).astype(int)
)
df = df[['D', 'P']]
结果:
D P
0 41234 1
1 42345 0
2 34212 0
3 34212 1
4 19374 0