我正在尝试定义一个函数,该函数将采用一个数据框并更改列中的值以创建多个新数据框。
以df1为例,如下所示:
df1:
class colB colC
0 1 1b 1c
1 2 2b 2c
2 3 3b 3c
3 4 4b 4c
4 5 5b 5c
我正在尝试创建多个二进制类来实现一对一分类。因此该函数将创建...
df2:
class colB colC
0 1 1b 1c
1 -1 2b 2c
2 -1 3b 3c
3 -1 4b 4c
4 -1 5b 5c
df3:
class colB colC
0 -1 1b 1c
1 1 2b 2c
2 -1 3b 3c
3 -1 4b 4c
4 -1 5b 5c
df4:
class colB colC
0 -1 1b 1c
1 -1 2b 2c
2 1 3b 3c
3 -1 4b 4c
4 -1 5b 5c
,依此类推。所有唯一值都是1到120之间的增量值。
有什么想法吗?
谢谢
答案 0 :(得分:1)
使用np.identity
(我将您的列名更改为class_
,因此它没有使用受保护的关键字):
arr = np.identity(len(df1))
arr[arr==0] = -1
dfs = [df1.assign(class_=arr[:, i]) for i in range(len(df1))]
for d in dfs:
print(d, end='\n\n')
class_ colB colC
0 1.0 1b 1c
1 -1.0 2b 2c
2 -1.0 3b 3c
3 -1.0 4b 4c
4 -1.0 5b 5c
class_ colB colC
0 -1.0 1b 1c
1 1.0 2b 2c
2 -1.0 3b 3c
3 -1.0 4b 4c
4 -1.0 5b 5c
class_ colB colC
0 -1.0 1b 1c
1 -1.0 2b 2c
2 1.0 3b 3c
3 -1.0 4b 4c
4 -1.0 5b 5c
class_ colB colC
0 -1.0 1b 1c
1 -1.0 2b 2c
2 -1.0 3b 3c
3 1.0 4b 4c
4 -1.0 5b 5c
class_ colB colC
0 -1.0 1b 1c
1 -1.0 2b 2c
2 -1.0 3b 3c
3 -1.0 4b 4c
4 1.0 5b 5c