2016-08-03 66 views
1

選擇考慮下面的多指標熊貓臺系列:功能通過標籤

import pandas as pd 
import numpy as np 

val = np.array([ 0.4, -0.6, 0.6, 0.5, -0.4, 0.2, 0.6, 1.2, -0.4]) 
inds = [(-1000, 1921.6), (-1000, 1922.3), (-1000, 1923.0), (-500, 1921.6), 
     (-500, 1922.3), (-500, 1923.0), (-400, 1921.6), (-400, 1922.3), 
     (-400, 1923.0)] 
names = ['pp_delay', 'wavenumber'] 
example = pd.Series(val) 
example.index = pd.MultiIndex.from_tuples(inds, names=names) 

example現在看起來應該

pp_delay wavenumber 
-1000  1921.6  0.4 
      1922.3  -0.6 
      1923.0  0.6 
-500  1921.6  0.5 
      1922.3  -0.4 
      1923.0  0.2 
-400  1921.6  0.6 
      1922.3  1.2 
      1923.0  -0.4 
dtype: float64 

我通過pp_delay要組例子並選擇範圍內的每個組使用wavenumber索引並對該子組執行操作。爲了澄清我的意思,我舉幾個例子。

這是一個基於位置的解決方案。

example.groupby(level="pp_delay").nth(list(range(1,3))).groupby(level="pp_delay").sum() 

這給

pp_delay 
-1000 0.0 
-500 -0.2 
-400  0.8 
dtype: float64 

現在最後給每個pp_delay組的元素已經被求和。

另一種解決方案,更直接的是在循環遍歷組:

delays = example.index.levels[0] 
res = np.zeros(delays.shape) 
roi = slice(1922, 1924) 
for i in range(3): 
    res[i] = example[delays[i]][roi].sum() 
res 

array([ 0. , -0.2, 0.8]) 

反正我不喜歡它,多醚,因爲它不合身通常的熊貓風格。

現在我非常想是這樣的:

example.groupby(level="pp_delay").loc[1922:1924].sum() 

,或者甚至像

example[:, 1922:1924].sum() 

但顯然大熊貓索引不工作的方式。任何人都有更好的辦法?

乾杯

回答

2

我會跳過groupby

example.unstack(0).ix[1922:1924].sum() 

pp_delay 
-1000 0.0 
-500 -0.2 
-400  0.8 
dtype: float64