想象一下,我有一个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等命令。
答案 0 :(得分:3)
您可以使用loc
和np.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
列顺序不同,上述内容也适用。