如何使用元组数组查询pandas数据帧?

2024-04-25 19:56:39 发布

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

我有一个pandas数据帧,其结构如下:

sample data frame image

我有一个元组数组

arr_tuples = [(0,3),(1,1),(1,3),(2,1)]

数组中的每个元组分别表示上述数据帧的行和列索引。在

我可以使用for循环找到arr_tuples中索引的数据帧中的所有值,如下所示:

value_array = []
for item in arr_tuples:
    row = item[0]
    col = item[1]
    value = df.iloc[row,col] # I also tried df.get_value here with similar result 
    value_array.append(value)

但这似乎是一个非常缓慢的方法。如果我的arr_tuples中有很多元组,这将需要很长时间。在

有没有更好更快的方法来达到同样的效果? 在pandas中,有没有方法可以使用元组的列表/数组(包含行和列索引)来获取数据帧中的值?在


Tags: 数据方法pandasdfforvaluecol数组
2条回答

如果将arr_tuples变成Series,则会更快:

import pandas as pd
data = {0:[1,4,11,14],1:[2,5,12,5],2:[3,6,13,6],3:[4,7,14,7]}
df = pd.DataFrame(data)
arr_tuples = [(0,3),(1,1),(1,3),(2,1)]

s = pd.Series(arr_tuples)
value_array = s.apply(lambda (x,y): df.iloc[x,y])

value_array
0     4
1     5
2     7
3    12
dtype: int64

您可以将pd.DataFrame.lookup与一些zip和打开包装的诡计一起使用

df.lookup(*zip(*arr_tuples))

array([ 4,  5,  7, 12])

  • list(zip(*arr_tuples))从元组列表中创建两个元组

    [(0, 1, 1, 2), (3, 1, 3, 1)]
    
  • 很好,因为第一个元组是索引,第二个元组是列。这就是pd.DataFrame.lookup接受的参数。所以如果我把它们拆开,就行了

    df.lookup(*zip(*arr_tuples))
    
    array([ 4,  5,  7, 12])
    

相关问题 更多 >