Предположим, у меня есть 3 переменные кадра данных: res_df_union
является основным кадром данных, а df_res
и df_vacant
являются подкадрами, созданными из res_df_union.
Все они имеют два столбца, которые называются uniqueid
и vacant_has_res
.Моя цель - сравнить значения столбцов uniqueid
в df_res
и df_vacant
и, если они совпадают, присвоить vacant_has_res
в res_df_union
со значением 1. * Примечание: я использую geoPandas
(gpd Dataframe) вместо просто pandas
, потому что я работаю с пространственными данными, но концепция та же.
res_df_union = gpd.read_file(union, layer=union_feat)
df_parc_res = res_df_union[res_df_union.Parc_Res == 1]
unq_id_res = df_parc_res.uniqueid.unique()
df_parc_vacant = res_df_union[res_df_union.Parc_Vacant == 1]
unq_id_vac = df_parc_vacant.uniqueid.unique()
vacant_res_ids = []
for id_a in unq_id_vac:
for id_b in unq_id_res:
if id_a == id_b:
vacant_res_ids.append(id_a)
Код до этого момента работает.У меня есть список uniqueid
, которые соответствуют.Теперь я просто хочу найти эти уникальные идентификаторы в res_df_union
и затем назначить res_df_union['vacant_has_res']
= 1. Когда я запускаю следующее, это либо приводит к аварийному завершению работы моей IDE, либо никогда не завершается (после нескольких часов).Что я делаю не так и есть ли более эффективный способ сделать это?
def u_row(row, id_val):
if row['uniqueid'] == id_val:
return 1
for item in res_df_union['uniqueid']:
if item in vacant_res_ids:
res_df_union['Has_Res_Association'] = res_df_union.apply(lambda row: u_row(row, item), axis = 1)