2017-03-01 46 views
2

我有一個整潔的數據框(這我不知道如何從頭開始生產),如:熊貓系列或整齊據幀:指數水平值數據框列

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。我想用多指標一個數據幀,並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或轉動,但不能得到它的權利以某種方式(轉給了我層次列和樞軸KeyError異常) 我試着如:df.pivot(('epoch','time'),'condition')

回答

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 
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) 
+0

謝謝,也爲StringIO技巧,非常有用;只是透視方法對我來說不那麼簡單。 – TNT