抱歉,我知道有很多与索引相关的问题,很可能让我无所适从,但是我对此有些麻烦。我熟悉.loc
,.iloc
和.index
方法以及一般的切片。方法.reset_index
可能尚未(也可能无法)在我们的数据帧上调用,因此索引标签可能不正确。数据帧和numpy数组实际上是数据帧的不同长度子集,但是对于本示例,我将使其保持相同的大小(一旦有了示例,我就可以处理偏移量)。
这是一张图片,显示我在寻找什么:
我可以根据一些搜索条件从数据框中提取行的列。
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]