将多个列值更改为二进制值

时间:2018-08-19 03:39:11

标签: python pandas function dataframe classification

我之前曾问过这个问题,但是我得到的答案并没有像我想的那样得出来,所以我就在这里。

上一个问题:Defining a function for changing column values and creating new datasets

我正在尝试定义一个函数,该函数将采用一个数据框并更改列中的值以创建多个新数据框。

以df1为例,如下所示:

gradle-4.8-all.zip
classpath 'com.android.tools.build:gradle:3.2.0-beta05'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.51"

compileSdkVersion 28
buildToolsVersion '28.0.2'
minSdkVersion 23
targetSdkVersion 28

我正在尝试创建多个二进制类来实现一对一分类。因此该函数将创建...

  df1:

  class    colB    colC
0   1      1b      1c
1   2      2b      2c
2   3      3b      3c
3   1      4b      4c
4   2      5b      5c

,依此类推。所有唯一值都是1到120之间的增量值。

先前答案给出(np.identity)的问题是它创建了将每个单个值都设为1或-1的数据帧,而不是将相同的值归为同一类。

谢谢

2 个答案:

答案 0 :(得分:2)

使用<template> <div> ComponentB <ComponentA></ComponentA> </div> </template> <script> import ComponentA from "./ComponentA.vue"; export default { name: "ComponentB", beforeCreate() { this.$options.components.ComponentA = require("./ComponentA"); }, components: { ComponentA } }; </script> beforeCreate() { this.$options.components.ComponentA = require("./ComponentA"); }的类似想法(再次重命名np.where列,因此它不会覆盖内置名称):

unique

class

答案 1 :(得分:1)

与@ user3483203类似,但使用maskfillna

[df.assign(**{'class' : df['class'].mask(df['class'].ne(cls)).fillna(-1)}) 
     for cls in df['class'].unique()
]

[   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    2.0   2b   2c
 2   -1.0   3b   3c
 3   -1.0   4b   4c
 4    2.0   5b   5c,    class colB colC
 0   -1.0   1b   1c
 1   -1.0   2b   2c
 2    3.0   3b   3c
 3   -1.0   4b   4c
 4   -1.0   5b   5c]