2015-05-17 37 views
3

想象我有一個像pandas.Dataframe:如何從每列選擇一個特定的索引?

x = DataFrame({ 'a': [7,6,8,0,2,5], 
      'b': [3,4,5,6,7,8], 
      'c': [3,8,5,6,0,1]}, index=[1,2,3,4,5,6]) 

然後,我有一個pandas.Series這給了我,每個鍵,具體指標我想選擇:

y = Series([4,1,6], index=['a','b','c']) 

是無論如何,我可以找到最好的熊貓方式這些指標? 我希望避免在pandas.Series或pandas.Dataframe上循環,我更喜歡使用像.loc,.query等命令。

回答

3

您可以使用locnp.diagonal的組合來實現這一點:

In [26]: 

np.diagonal(x.loc[y]) 
Out[26]: 
array([0, 3, 1], dtype=int64) 

loc這裏將執行行標籤查找:

In [27]: 

x.loc[y] 
Out[27]: 
    a b c 
4 0 6 6 
1 7 3 3 
6 5 8 1 

np.diagonal對角線返回值。

爲了使這種穩健列的順序,我們可以專門使用值標籤查找和列索引選擇:

In [30]: 

np.diagonal(x.loc[y.values, y.index]) 
Out[30]: 
array([0, 3, 1], dtype=int64) 

以上將與工作,即使在y列是一個列順序不同於x的順序。

+0

我知道.loc在這種情況下的行爲,這就是爲什麼我想要一些可以部分解決這個問題的原因。確實,numpy.diagonal是個好主意。我希望熊貓有類似的東西實施。 –

+0

@Galdaran看起來像他們在['0.14.0']中做的(http://pandas.pydata.org/pandas-docs/version/0.14.1/generated/pandas.Index.diagonal.html),但這是不再在最新版本中可能由於重構爲ndframe和ndarray而不是numpy數組 – EdChum

+0

但是,應用numpy.diagonal不會返回另一個pandas.Series,而是一個數組。 –

相關問題