在数据帧中切换行和列

时间:2016-07-22 10:24:11

标签: python pandas dataframe

我的数据框如下所示:

import pandas as pd
datelisttemp = pd.date_range('1/1/2014', periods=3, freq='D')
s = list(datelisttemp)*3
s.sort()
df = pd.DataFrame({'day':s,'stats':['mean','var','std','mean','var','std','mean','var','std'], 's1':[21 ,25 ,27 ,42 ,4 ,74 ,63 ,67, 6],'s2':[34 ,32 ,3, 53 ,75 ,5, 32, 75, 7], 's3':[8 ,82 ,8, 12 ,43 ,12, 99, 99, 95]})

我想得到一个这样的数据框:

df = pd.DataFrame({'sensors':  ['s1','s2','s3','s1','s2','s3','s1','s2','s3'],'day':s,'mean':[21,34,8,42,53,12,  63,32,99],'var':[25,32,82,4,75,43,67,75,99],'std':[27,3,8,74,5,12,74,5,12]})

基本上,我需要数据框在行中包含传感器,在列中包含统计信息。可以请别人帮助我吗?

1 个答案:

答案 0 :(得分:2)

您可以将pivot_tablestack一起使用。上次reset_index,重命名列并按rename_axis删除列名称(pandas 0.18.0中的新内容):

print (df.pivot_table(index='day', columns='stats')
         .stack(0)
         .reset_index()
         .rename(columns={'level_1':'sensors'})
         .rename_axis(None, axis=1))

         day sensors  mean  std  var
0 2014-01-01      s1    21   27   25
1 2014-01-01      s2    34    3   32
2 2014-01-01      s3     8    8   82
3 2014-01-02      s1    42   74    4
4 2014-01-02      s2    53    5   75
5 2014-01-02      s3    12   12   43
6 2014-01-03      s1    63    6   67
7 2014-01-03      s2    32    7   75
8 2014-01-03      s3    99   95   99