gpt4 book ai didi

python - 将 Pandas 列与一长串元组进行比较

转载 作者:行者123 更新时间:2023-12-03 17:00:16 25 4
gpt4 key购买 nike

假设我们有一长串由坐标组成的元组:

coords = 
[(61.0, 73, 94.0, 110.0),
(61.0, 110.0, 94.0, 148.0),
(61.0, 148.0, 94.0, 202.0),
(61.0, 202.0, 94.0, 241.0).......]

我们的数据框有多个列,包括对应于坐标的“左、上、左1、上1”。
    left    top     left1   top1
0 398 57.0 588 86
1 335 122.0 644 145
2 414 150.0 435 167
3 435 150.0 444 164
4 444 150.0 571 167
... ... ... ... ...

我想检查哪些行落在这些坐标内。我目前正在一次执行一个元组,如下所示,但这非常慢。
for coord in coords:
result = df.loc[(df['left']>(coord[0])) &
(df['left1']<=(coord[2])) &
(df['top1']>(coord[1])) &
(df['top']<(coord[3]))]

有没有更快的方法来做到这一点?

非常感谢所有贡献者!

最佳答案

一种方法是交叉连接,然后是过滤器:

coord_df = pd.DataFrame(coords, columns=['left', 'top', 'left1', 'top1'])

# We need to assign dummies for the cross join
coord_df['dummy'] = 1
df['dummy'] = 1

both_rects = df.merge(coord_df, key='dummy', suffixes=('_inner', '_outer'))

然后,您将返回到按原始表达式进行过滤:
rects_within = both_rects.loc[(both_rects.left_inner > both_rects.left_outer) &
(both_rects.top_inner > both_rects.left_outer) &
(both_rects.left1_inner <= both_rects.left1_outer) &
(both_rects.top1_inner <= both_rects.top1_outer)]

关于python - 将 Pandas 列与一长串元组进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62023900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com