【问题标题】:Stack multiples columns into two columns in DataFrame.jl在 DataFrame.jl 中将多列堆叠成两列
【发布时间】:2021-12-30 05:31:14
【问题描述】:

假设我的源数据框和目标数据框是df1 和df2,如下图所示。

我想知道如何使用stack 将df1 转换为df2?谢谢。


julia> df1 = DataFrame(x1 = 1:4, x2 = 5:8, y1 = Char.(65:68), y2 = Char.(69:72))
4×4 DataFrame
 Row │ x1     x2     y1    y2   
     │ Int64  Int64  Char  Char 
─────┼──────────────────────────
   1 │     1      5  A     E
   2 │     2      6  B     F
   3 │     3      7  C     G
   4 │     4      8  D     H

julia> df2 = DataFrame(x = [d1.x1; d1.x2], y = [d1.y1; d1.y2])
8×2 DataFrame
 Row │ x      y    
     │ Int64  Char 
─────┼─────────────
   1 │     1  A
   2 │     2  B
   3 │     3  C
   4 │     4  D
   5 │     5  E
   6 │     6  F
   7 │     7  G
   8 │     8  H

【问题讨论】:

    标签: julia dataframes.jl


    【解决方案1】:

    你想要的不是普通的stack。 显然,您可以为每个x 和y 单独使用stack,然后将hcat 一起获得您的df21。但这里有一个不同的尝试。

    julia> long = stack(df1,All())
    16×2 DataFrame
     Row │ variable  value
         │ String    Any
    ─────┼─────────────────
       1 │ x1        1
       2 │ x1        2
       3 │ x1        3
       4 │ x1        4
       5 │ x2        5
       6 │ x2        6
       7 │ x2        7
       8 │ x2        8
       9 │ y1        A
      10 │ y1        B
      11 │ y1        C
      12 │ y1        D
      13 │ y2        E
      14 │ y2        F
      15 │ y2        G
      16 │ y2        H
    

    将所有x1,x2,y1,y2 转为x,x,y,y 并添加新的唯一id 列

    julia> long.variable = SubString.(long.variable,1,1);
    julia> long.id = repeat(1:8,2);
    julia> long
    16×3 DataFrame
     Row │ variable   value  id
         │ SubStrin…  Any    Int64
    ─────┼─────────────────────────
       1 │ x          1          1
       2 │ x          2          2
       3 │ x          3          3
       4 │ x          4          4
       5 │ x          5          5
       6 │ x          6          6
       7 │ x          7          7
       8 │ x          8          8
       9 │ y          A          1
      10 │ y          B          2
      11 │ y          C          3
      12 │ y          D          4
      13 │ y          E          5
      14 │ y          F          6
      15 │ y          G          7
      16 │ y          H          8
    

    终于unstack回来了

    julia> unstack(long, :variable, :value)
    8×3 DataFrame
     Row │ id     x    y
         │ Int64  Any  Any
    ─────┼─────────────────
       1 │     1  1    A
       2 │     2  2    B
       3 │     3  3    C
       4 │     4  4    D
       5 │     5  5    E
       6 │     6  6    F
       7 │     7  7    G
       8 │     8  8    H
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-05
      • 2020-01-02
      • 2020-02-06
      • 1970-01-01
      • 1970-01-01
      • 2016-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多