代码之家  ›  专栏  ›  技术社区  ›  LostinSpatialAnalysis

如何将多列堆叠为一列并填充列标题

  •  0
  • LostinSpatialAnalysis  · 技术社区  · 2 年前

    我有以下数据帧:

        Date       Blue     Red      Green
    -----------------------------------------
    1   1/1/14       55      34         34  
    2   1/2/14       36      35         23 
    3   1/3/14       23      46         43
    4   1/4/14       47      34         55
    

    我想将这些具有唯一值的颜色命名列“堆叠”到一个单独的“颜色”列中,并将每个相应的值属性化,这样每行就有三列,每个列都有一个日期(按时间顺序,一个颜色标签和属性值),每个颜色的日期都重复。

    因此,我正在尝试获取此数据帧:

           Date       Color
    --------------------------
     1   1/1/14        Blue
     2   1/2/14        Blue
     3   1/3/14        Blue
     4   1/4/14        Blue
     5   1/1/14         Red
     6   1/2/14         Red
     7   1/3/14         Red
     8   1/4/14         Red
     9   1/1/14       Green
    10   1/2/14       Green
    11   1/3/14       Green
    12   1/4/14       Green
    ------------------------
    

    我正在尝试按颜色“堆叠”我的列,但我不确定我是应该堆叠、熔化还是串联。我应该使用哪种方法将所有颜色及其值放入一列?

    1 回复  |  直到 2 年前
        1
  •  2
  •   Corralien    2 年前

    我正在尝试按颜色“堆叠”我的列,但我不确定我是应该堆叠、熔化还是串联。

    使用 melt :

    >>> df.melt(id_vars='Date', var_name='Color', value_name='Value')
          Date  Color  Value
    0   1/1/14   Blue     55
    1   1/2/14   Blue     36
    2   1/3/14   Blue     23
    3   1/4/14   Blue     47
    4   1/1/14    Red     34
    5   1/2/14    Red     35
    6   1/3/14    Red     46
    7   1/4/14    Red     34
    8   1/1/14  Green     34
    9   1/2/14  Green     23
    10  1/3/14  Green     43
    11  1/4/14  Green     55
    

    具有不同输出的备选方案:

    >>> (df.set_index('Date').stack()
           .rename_axis(['Date', 'Color'])
           .reset_index(name='Value'))
          Date  Color  Value
    0   1/1/14   Blue     55
    1   1/1/14    Red     34
    2   1/1/14  Green     34
    3   1/2/14   Blue     36
    4   1/2/14    Red     35
    5   1/2/14  Green     23
    6   1/3/14   Blue     23
    7   1/3/14    Red     46
    8   1/3/14  Green     43
    9   1/4/14   Blue     47
    10  1/4/14    Red     34
    11  1/4/14  Green     55