Python/Pandas - 将列标题转换为索引

4
我需要处理的数据将按小时列出。我想将其转换为索引。样例如下:
 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
  .        .       .     .     . 

目前使用的是带有pandas模块的Python 3.4版本。

1个回答

4
使用set_indexstack
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接