如果满足条件则分配标识符

Assign Identifier if Conditions Met

我的 df1 包含每个观测的纬度和经度数据,df2 包含纬度和经度桶,它们一起捕获所有可能的组合。 df2 还包括一个包含每个桶的唯一 "bucket ID" 的列。我想在 df1 中创建一个列,其中为每个观察填充了正确的存储桶 ID。

df1

      | Latitude | Longitude
0     | 36.9003  | 98.2183
1     | 33.1701  | 98.2988
...   | ...      | ...
2999  | 39.8944  | 98.2018
3000  | 34.9582  | 100.0900

df2

      | Lat_Start | Lat_End | Long_Start | Long_End | Bucket_ID
0     | 33.10     | 33.15   | 98.20      | 98.25    | 0
1     | 33.16     | 33.20   | 98.26      | 98.30    | 1
...   | ...       | ...     | ...        | ...      | ...
76699 | 39.96     | 40.00   | 100.01     | 100.05   | 76699
76700 | 40.01     | 40.05   | 100.06     | 100.10   | 76700

预期输出 df1

      | Latitude | Longitude | Bucket_ID
0     | 36.9003  | 98.2183   | 34053
1     | 33.1701  | 98.2988   | 1
...   | ...      | ...       | ...
2999  | 39.8944  | 98.2018   | 65382
3000  | 34.9582  | 100.0900  | 3244

由于您的数据集似乎不是很大,这段简单(但效率低下)的代码可能会帮助您解决问题:

def find_bucket(latitude, longitude):
    for i in df2.index:
        if df2['Lat_Start'].loc[i]<=latitude and df2['Lat_End'].loc[i]>=latitude and df2['Long_Start'].loc[i]<=longitude and df2['Long_End'].loc[i]>=longitude:
            return df2['Bucket_ID'].loc[i]
    return -1

df1['Bucket_ID'] = df1.apply(lambda x: find_bucket(x.loc['Latitude'], x.loc['Longitude']), axis = 1)