Pandas:如果lat/lng列落入边界框内,则过滤大型(50米行)数据帧?

2024-05-28 20:59:51 发布

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

我有一个很大的数据集,我正在评估各种分析方法。它是一组csv,每个文件有大约4000万行。读入pandas数据帧,我有以下示例数据。(下面的数据是随机生成的)账户标识符会不时重复,有的在盒子里,有的在外面。我使用csv阅读器以一种“蛮力”的方式工作,并将一个随机生成的1000万行样本的处理时间降低到约60秒。我希望我可以用pandas来提高效率,因为实际的数据集要大得多,我们将来可能需要反复进行这种解析。在

                            account        lat         lng  
0  f413e6cd-bbfe-463b-bf58-cba1a74a4aff    50.847615     70.826473  
1  8b2ceb89-7ce0-4e14-a5f0-28acb7b05d8b    18.545991     115.078981    
2  a51ab728-14b5-473c-bed1-91953da8ba22    30.699439     9.660661  
3  83e3964f-130f-49bc-9c4b-d46d4b48c2cb    7.906903      70.507260
4  84c75e57-5a5f-4314-80be-d1271ecd76ef    -20.325371    48.310855 

这个块描述了我想要用来匹配dataframe行的函数。我有多个边界框,我需要检查成员资格。在

^{pr2}$

我真的不明白如何在收集新数据帧中匹配的行时,使用来自数据帧多个列的条件,将lambda函数应用于所有行。我在网上找不到任何类似的例子。在

到目前为止,我的工作是这样的:

df = pd.read_csv('DATA.csv')
df.columns = ['account', 'lat', 'lng']
accounts= df[(bottom <= df.lat) & (df.lat <= top) & (left <= df.lng) & (df.lng <= right)]

results = df[df.account.isin(accounts)]
results.to_csv('pd_out.csv', header=False, )

但这只适用于一个边界框。我不知道如何进行与上面类似的过滤,但是要使用inu-bounds函数。那么我怎样才能做到最好呢?在


Tags: 文件csv数据函数示例pandasdfaccount
1条回答
网友
1楼 · 发布于 2024-05-28 20:59:51

不太漂亮,但是要组合这两个条件,可以使用|运算符。注意两个框条件的括号。在

box1_cond = (bottom <= df.lat) & (df.lat <= top) & (left <= df.lng) & (df.lng <= right)
box2_cond = (bottom2 <= df.lat) & (df.lat <= top2) & (left2 <= df.lng) & (df.lng <= right2)
accounts = df[box1_cond | box2_cond]

相关问题 更多 >

    热门问题