2015-05-17 35 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,而是一个数组。 –

相关问题