如果满足条件则分配标识符
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)
我的 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)