python / pandas - 将列标题转换为索引

时间:2016-05-25 07:51:52

标签: python-3.x pandas

我必须处理的数据将每小时数据视为列。我想将其转换为索引。示例如下所示:

 year    month    day    1    2    3    4    5    ...   24
 2015      1       1     a    b   ...................    c
 2015      1       2     d    e   ...................    f
 2015      1       3     g    h   ...................    i

我想让输出文件像这样:

 year    month    day   hour value
 2015      1       1     1     a  
 2015      1       1     2     b 
  .        .       .     .     . 
 2015      1       1     24    c 
 2015      1       2     1     d
  .        .       .     .     . 

目前使用python 3.4和pandas模块

1 个答案:

答案 0 :(得分:2)

set_index使用stack

print (df.set_index(['year','month','day'])
         .stack()
         .reset_index(name='value')
         .rename(columns={'level_3':'hour'}))

   year  month  day hour value
0  2015      1    1    1     a
1  2015      1    1    2     b
2  2015      1    1   24     c
3  2015      1    2    1     d
4  2015      1    2    2     e
5  2015      1    2   24     f
6  2015      1    3    1     g
7  2015      1    3    2     h
8  2015      1    3   24     i

meltsort_values的另一种解决方案:

print (pd.melt(df, id_vars=['year','month','day'], var_name='hour')
         .sort_values(['year', 'month', 'day','hour']))

   year  month  day hour value
0  2015      1    1    1     a
3  2015      1    1    2     b
6  2015      1    1   24     c
1  2015      1    2    1     d
4  2015      1    2    2     e
7  2015      1    2   24     f
2  2015      1    3    1     g
5  2015      1    3    2     h
8  2015      1    3   24     i