【问题标题】:Merging huge dataFrame in range of values合并值范围内的巨大数据框
【发布时间】:2020-08-21 00:00:19
【问题描述】:

我有两个数据框,其中包含经纬度值和一些附加信息 我想合并值范围内的两个数据框

df1 

lat1 lon1 lat2 lon2 a1 a2 a2
1.0   1.0  4.0  7.0 a  d  p
2.0   2.0  5.0  8.0 b  e  q
3.0   3.0  6.0  9.0 c  f  r

这是 3000 万行的大小

df2

lat  lon  x 
1.0  1.0  m
1.0  2.0  n
2.0  3.0  o

这是 2000 万行的大小

现在对于 df1 中的每一行,我想与 df2 合并,其中 df2 中的所有 lat 在 lat1 和 lat2 之间 lon1 和 lon2 中的 lon

lat1<=lat<=lat2
lon1<=lon<=lon2

我试过了
Best way to join / merge by range in pandas
how to perform an inner or outer join of DataFrames with Pandas on non-simplistic criterion

但我仍然内存不足。
执行此操作的最佳方法是什么?

【问题讨论】:

标签: python pandas dataframe


【解决方案1】:
import geopandas as gp
from shapely.geometry import Polygon, Point
df2_geo = gp.GeoDataFrame(df2, geometry=gp.points_from_xy(df2.latitude, df2.longitude))

def make_polygon(a,b,c,d):
    lat_list = [a,a,c,c]
    lon_list = [b,d,d,b]
    return Polygon(zip(lat_list, lon_list))

df1['geometry'] = df1.apply(lambda x: make_polygon(x['_from_latitude'], x['_from_longitude'], x['_to_latitude'],x['_to_longitude']),axis=1)              
df1_gep = gp.GeoDataFrame(df1)
result = geopandas.sjoin(df2_geo, df1_gep, how="inner", op='intersects')

@SubbuVidyaSekar 感谢您的建议
这工作得很好

【讨论】:

    猜你喜欢
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    • 1970-01-01
    • 2018-02-21
    • 2014-05-30
    • 2021-01-19
    相关资源
    最近更新 更多