【问题标题】:Defining a function for changing column values and creating new datasets定义用于更改列值和创建新数据集的函数
【发布时间】:2019-01-25 14:03:17
【问题描述】:

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

例如,从 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 的增量值。

有什么想法吗?

谢谢

【问题讨论】:

  • 我不明白。你到底想做什么?
  • 你真的想用1-1替换,还是要加上1/减去1
  • 对不起。我正在尝试更改“类”列上的值并使用更改后的值创建新的数据框。因此,从 df1 开始,我最终会得到 5 个新的数据框,其列值已更改。
  • 我正在尝试从多类分类创建一个二元分类,以进行一对多训练。因此,“类”列下的所有不同值 [1,2,3,4,5] 将变为 1 或 -1。这应该发生在所有唯一值...
  • 所以对于 df2,'class' 下的所有值都将被重新分配,因此除 1 之外的任何值都将变为 -1。对于 df3,所有的“2”都将变为“1”,所有其他值都将变为 -1……就这样……

标签: python pandas function dataframe classification


【解决方案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

【讨论】:

  • 非常感谢。它可以工作,但 print(d, end='\n\n') 出现语法错误。对于我得到的每个数组,将它们保存到单独的数据帧中的最简单方法是什么?
  • 列表dfs 包含您所有的DataFrame,因此只需像dfs[0]dfs[1] 等一样访问它们。
  • 以防万一你看到这个,我在你的回答中遇到了问题,但是我没有正确解释初始数据帧是我的错,对不起。发布了一个新问题:stackoverflow.com/questions/51914247/…
  • @NZ_DJ 我也回答了新问题 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-21
  • 2018-07-29
相关资源
最近更新 更多