pandas系列或整洁的数据框:数据框列的索引级别值

时间:2017-03-01 08:52:15

标签: pandas dataframe

我有一个整洁的Dataframe(我不确定如何从头开始制作),例如:

signal condition  epoch  time value  
0             A      0  -1100  0.12  
1             A      0  -1080  0.09     
2             A      0  -1060  0.08  
...

有几个条件A,B,C。我希望获得一个带有multiindex的DataFrame,并将value列的值作为新(且唯一)列A, B, C中的值,所以最后它看起来像:

value          A     B     C
epoch time           
0    -1100   0.12   0.23   0.09
     -1080   0.09   0.22   0.10
     -1060   0.08   0.19   0.06
...

我尝试先将除value之外的所有内容放入索引set_index(['condition','epoch','time'])然后transpose或枢轴,但无法以某种方式将其设置为正确(转置为我提供了分层列和pivot KeyError) 我试过了例如:df.pivot(('epoch','time'),'condition')

2 个答案:

答案 0 :(得分:1)

df.set_index(['epoch', 'time', 'condition']).value.unstack().rename_axis('value', 1)

value           A     B     C
epoch time                   
0     -1100  0.12  0.23  0.09
      -1080  0.09  0.22  0.10
      -1060  0.08  0.19  0.06

设置

import pandas as pd
from io import StringIO

txt = """signal condition  epoch  time value  
0             A      0  -1100  0.12  
1             A      0  -1080  0.09     
2             A      0  -1060  0.08  
0             B      0  -1100  0.23  
1             B      0  -1080  0.22     
2             B      0  -1060  0.19  
0             C      0  -1100  0.09  
1             C      0  -1080  0.10     
2             C      0  -1060  0.06  """

df = pd.read_csv(StringIO(txt), delim_whitespace=True)

答案 1 :(得分:1)

使用明确设计用于此类长到宽转换的pivot,您走在正确的轨道上:

# show dummy df 
print(df)

    signal  condition   epoch   time    value
0   0       A           0       -1100   0.12
1   1       A           0       -1080   0.09
2   2       A           0       -1060   0.08
3   0       B           0       -1100   0.42
4   1       B           0       -1080   0.29
5   2       B           0       -1060   0.18
6   0       C           0       -1100   0.32
7   1       C           0       -1080   0.59
8   2       C           0       -1060   0.38

# pivot
pd.pivot_table(df, values="value", columns="condition", index=["epoch", "time"])

condition       A       B       C
epoch   time            
0       -1100   0.12    0.42    0.32
        -1080   0.09    0.29    0.59
        -1060   0.08    0.18    0.38