抱歉,我知道有很多与索引相关的问题,很可能让我无所适从,但是我对此有些麻烦。我熟悉.loc.iloc.index方法以及一般的切片。方法.reset_index可能尚未(也可能无法)在我们的数据帧上调用,因此索引标签可能不正确。数据帧和numpy数组实际上是数据帧的不同长度子集,但是对于本示例,我将使其保持相同的大小(一旦有了示例,我就可以处理偏移量)。

这是一张图片,显示我在寻找什么:
python - 将Pandas数据框的行映射到numpy数组-LMLPHP

我可以根据一些搜索条件从数据框中提取行的列。

idxlbls = df.index[df['timestamp'] == dt]
stuff = df.loc[idxlbls, 'col3':'col5']


但是,如何将其映射到行号(数组索引,而不是标签索引)以用作numpy中的数组索引(假设行长相同)?

stuffprime = array[?, ?]


我需要它的原因是因为数据帧更大且更完整,并且包含列搜索条件,但是numpy数组是已经在管道中事先提取和修改的子集(并且它们中没有相同的搜索条件) 。我需要搜索数据框并从numpy数组中提取等效数据。基本上,我需要将数据帧中的特定行与numpy数组的相应行相关联。

最佳答案

我相信过滤后的列名称需要get_indexer用于位置,索引可以使用相同的方式,或者numpy.where对于布尔掩码可以用于位置:

df = pd.DataFrame({'timestamp':list('abadef'),
                   'B':[4,5,4,5,5,4],
                   'C':[7,8,9,4,2,3],
                   'D':[1,3,5,7,1,0],
                   'E':[5,3,6,9,2,4]}, index=list('ABCDEF'))

print (df)
  timestamp  B  C  D  E
A         a  4  7  1  5
B         b  5  8  3  3
C         a  4  9  5  6
D         d  5  4  7  9
E         e  5  2  1  2
F         f  4  3  0  4

idxlbls = df.index[df['timestamp'] == 'a']
stuff = df.loc[idxlbls, 'C':'E']
print (stuff)
   C  D  E
A  7  1  5
C  9  5  6

a = df.index.get_indexer(stuff.index)


或者通过布尔掩码获取位置:

a = np.where(df['timestamp'] == 'a')[0]

print (a)
[0 2]




b = df.columns.get_indexer(stuff.columns)
print (b)
[2 3 4]

08-19 21:34
查看更多