Как заполнить столбец dataframe на основе значения другого столбца - PullRequest
0 голосов
/ 19 июня 2019

Предположим, у меня есть 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)
...