2012-04-16 22 views
15

特定級別選擇數據我有以下的熊貓數據框用多指標(Z,A):在從多指標

   H1  H2 
    Z A 
0 100 200 0.3112 -0.4197 
1 100 201 0.2967 0.4893  
2 100 202 0.3084 -0.4873 
3 100 203 0.3069 NaN   
4 101 203 -0.4956 NaN  

問:我如何選擇與A = 203的所有項目?我試過df[:,'A']但它不起作用。然後我發現this聯機文檔中,所以我嘗試:
df.xs(203,level='A')
但我得到:
TypeError: xs() got an unexpected keyword argument 'level'
我也沒有看到在安裝文檔(df.xs?)這個參數:
「參數---- ------ key:object一些包含在索引中的標籤,或者部分包含在MultiIndex軸中:int,default 0用於檢索副本上的橫截面的軸:布爾值,默認爲True是否複製數據「
注:我有開發版本。我發現this thread。他們建議是這樣的:

df.select(lambda x: x[1]==200, axis=0) 

我還是想知道與水平參數,或者什麼是在當前版本的推薦方法df.xs發生了什麼事。

+0

哪個版本您使用的?顯然'level'是在[version 0.7.0']處添加的(http://pandas.pydata.org/pandas-docs/dev/whatsnew.html#v-0-7-0-february-9-2012) 。 – Avaris 2012-04-16 13:44:34

+0

很明顯,這就是問題所在,我在0.6.1上,我是從git安裝的,但是我仍然在0.6.1上,謝謝,我應該關閉這個問題,如果是的話,怎麼辦? – elyase 2012-04-16 14:01:12

+0

你可以用問題的原因和替代解決方案寫出答案並接受它。 – Avaris 2012-04-16 14:05:10

回答

7

問題就出在我的假設(不正確的),我是在開發的版本,而在現實中我有1.6.1,可以檢查與當前安裝的版本:在當前版本df.xs()

import pandas 
print pandas.__version__ 

與水平參數工作正常。

4

不是直接這個問題的答案,但如果你要選擇一個以上的價值,你可以使用「切片()」標記:

import numpy 
from pandas import MultiIndex, Series 

arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'], 
       ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']] 
tuples = list(zip(*arrays)) 
index = MultiIndex.from_tuples(tuples, names=['first', 'second']) 
s = Series(numpy.random.randn(8), index=index) 

In [10]: s 
Out[10]: 
first second 
bar one  0.181621 
     two  1.016225 
baz one  0.716589 
     two  -0.353731 
foo one  -0.326301 
     two  1.009143 
qux one  0.098225 
     two  -1.087523 
dtype: float64 

In [11]: s.loc[slice(None)] 
Out[11]: 
first second 
bar one  0.181621 
     two  1.016225 
baz one  0.716589 
     two  -0.353731 
foo one  -0.326301 
     two  1.009143 
qux one  0.098225 
     two  -1.087523 
dtype: float64 

In [12]: s.loc[slice(None), "one"] 
Out[12]: 
first 
bar  0.181621 
baz  0.716589 
foo  -0.326301 
qux  0.098225 
dtype: float64 

In [13]: s.loc["bar", slice(None)] 
Out[13]: 
first second 
bar one  0.181621 
     two  1.016225 
dtype: float64