【问题标题】:Melting in pandas loses index大熊猫融化指数下降
【发布时间】:2020-09-16 01:46:31
【问题描述】:

我有以下数据框:

        Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
Year                                                
2010    9.8 9.8 9.9 9.9 9.6 9.4 9.4 9.5 9.5 9.4 9.8 9.3
2011    9.1 9.0 9.0 9.1 9.0 9.1 9.0 9.0 9.0 8.8 8.6 8.5
2012    8.3 8.3 8.2 8.2 8.2 8.2 8.2 8.1 7.8 7.8 7.7 7.9

我想达到以下结果:

      Month Values
Year
2010  Jan    9.8
2010  Feb    9.8
2010  Mar    9.9
etc......

我尝试了这里提出的方法: pandas, melt, unmelt preserve index:

df = pd.melt(df.reset_index(), id_vars='index',value_vars=months)

“月份”是我通过获取月份的列名列表创建的列表:

months = df.columns.values.tolist()[1:]

但是,结果是:

       index variable  value
   0    NaN   Jan      9.8
   1    NaN   Jan      9.1
   2    NaN   Jan      8.3
   3    NaN   Jan      8.0
   4    NaN   Jan      6.6

所以,我想保留年份值作为索引。我怎样才能做到这一点? 谢谢。

【问题讨论】:

  • 在pandas版本>=1.1,可以使用ignore_index参数:df.melt(ignore_index=False)

标签: pandas melt


【解决方案1】:

如果你有这样好的索引,你可以stack

df.rename_axis('Month', axis='columns').stack().to_frame('Values')

rename_axis 方法只是让索引标签变得漂亮的一些糖。

【讨论】:

    【解决方案2】:

    melt:

    df.reset_index().melt('Year',var_name='Month',value_name='Values').set_index('Year')
    
        Month  Values
    Year              
    2010   Jan     9.8
    2011   Jan     9.1
    2012   Jan     8.3
    2010   Feb     9.8
    2011   Feb     9.0
    .........
    .......
    

    stack():

    df.rename_axis('Month',axis=1).stack().reset_index(1,name='Values')
    
          Month  Values
    Year              
    2010   Jan     9.8
    2010   Feb     9.8
    2010   Mar     9.9
    2010   Apr     9.9
    2010   May     9.6
    2010   Jun     9.4
    .......
    ......
    

    【讨论】:

      猜你喜欢
      • 2018-11-04
      • 1970-01-01
      • 2021-12-26
      • 2019-08-19
      • 2021-10-27
      相关资源
      最近更新 更多