将Pandas dataframe的行映射到numpy数组中

2024-10-01 09:17:57 发布

您现在位置:Python中文网/ 问答频道 /正文

抱歉,我知道有太多关于索引的问题,而且它可能是我的主角,但我有点麻烦。我通常熟悉.loc.iloc,和{}方法和切片。方法.reset_index可能没有(也可能无法)在我们的数据帧上调用,因此索引标签可能没有顺序。dataframe和numpy数组实际上是dataframe的不同长度的子集,但是对于这个示例,我将保持它们的大小相同(一旦有了一个示例,我就可以处理偏移)。在

这是一张我想要的照片: enter image description here

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

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

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

^{pr2}$

我之所以需要它是因为dataframe更大、更完整,并且包含列搜索条件,但是numpy数组是先前在管道中提取和修改过的子集(其中没有相同的搜索条件)。我需要搜索dataframe并从numpy数组中提取等价的数据。基本上,我需要将数据帧中的特定行与numpy数组的相应行相关联。在


Tags: 数据方法numpy示例dataframedfindex标签
2条回答

我会把熊猫指数映射成纽比指数:

keys_dict = dict(zip(idxlbls, range(len(idxlbls))))

然后可以使用字典keys_dict通过pandas索引来寻址数组元素:array[keys_dict[some_df_index], :]

我相信需要^{}通过过滤的列名称查找位置,对于索引是可能的,使用相同的方法或使用{a2}通过布尔掩码查找位置:

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)

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

^{pr2}$
b = df.columns.get_indexer(stuff.columns)
print (b)
[2 3 4]

相关问题 更多 >