用二进制numpy数组提取pandas索引

时间:2018-04-30 06:50:38

标签: python pandas numpy

import pandas as pd
import numpy as np


binArray = np.array([[1, 0, 1]])
print(binArray)
list = ('Text0', 'Text1', 'Text2')
indx = pd.Index(list)
print(indx)

嗨!

如何提取' Text0'和' Text2'在binArray变量的帮助下?请注意binArray和amp; indx在我的代码中总是长度为N.

谢谢!

1 个答案:

答案 0 :(得分:0)

可能是使用np.where()np.take()来执行所需的操作。

binArray = np.array([[1, 0, 1]])  # Are you sure its not [] instead of [[]]
list = ('Text0', 'Text1', 'Text2')
indx = pd.Index(list)

# get indices for all 1 in binArray[0]
indices = np.where(binArray[0]==1)[0]
result = np.take(indx, indices)

您的结果现在是Index([u'Text0', u'Text2'], dtype='object'),这正是您所需要的。

解释

np.take()将数组和索引作为参数,并返回与数组中的索引对应的值。例如:

>>> a = [4, 3, 5, 7, 6, 8]
>>> indices = [0, 1, 4]
>>> np.take(a, indices)
array([4, 3, 6])

np.where()根据给定条件返回给定数组中的元素。在这种情况下,我们要求来自binArray[0]的所有索引,其值为1,其indx中的相应地图是您最终结果所需的地图。