2017-02-26 70 views
1

後我想樞轉數據幀(從模擬記錄)後到子集的以下數據幀子集上大熊貓數據幀使用pivot_table

import pandas as pd 

df = pd.DataFrame(
     {'runid' : [26 , 26 , 26 , 26 , 26 , 26 , 27 , 27 , 27 , 27 , 27 , 27 ], 
     'time' : [0 , 1 , 1 , 3 , 5 , 7 , 0 , 0 , 0 , 2 , 4 , 5 ], 
     'process': ['p1', 'p2', 'p2', 'p1', 'p1', 'p2', 'p1', 'p1', 'p2', 'p2', 'p2', 'p1'], 
     'state' : ['a' , 'a' , 'b' , 'b' , 'c' , 'c' , 'a' , 'b' , 'a' , 'b' , 'c' , 'c' ] 
     }) 

然後轉動數據幀:

data = pd.pivot_table(df, index=['runid', 'process'], columns=['state'], values=['time']) 

輸出:

   time  
state   a b c 
runid process   
26 p1   0 3 5 
     p2   1 1 7 
27 p1   0 0 5 
     p2   0 2 4 

我該如何這個pivoted DataFrame,以便runid 26和列a和b被選中(這樣我就可以用runid 26從所有進程中減去a,並存儲這些值用於分析)。

回答

1

您可以使用pd.IndexSlice對象來使語法更好一點,然後只是loc

>>> idx = pd.IndexSlice 
>>> data.loc[idx[26, :], idx[:, ['a', 'b']]] 

       time 
state   a b 
runid process   
26 p1   0 3 
     p2   1 1 
+0

謝謝!我該如何添加一個添加列'bminusa'到這個子集的值減去一個? – Rene

+0

@Rene'sub_df.time.b - sub_df.time.a'?您應該查看文檔的[MultiIndex/Advanced Indexing](http://pandas.pydata.org/pandas-docs/stable/advanced.html)部分。 – miradulo