기관코드와 전체기관명으로 구성된 df1
소관기관 컬럼에 전체기관명만 있는 df2
두 개의 데이터 프레임을 합쳐서 하나로 병합하고 싶다면, pd.merge
함수를 쓰면 된다.
하지만, merge 함수 만으로는 경찰관, 교육부
가 입력된 셀은 매핑될 수 없다.
이 문제를 해결하기 위해 아래와 같은 코드를 작성하였다.
# 기관코드 merge
new_df = pd.merge(df2, df1, how="left", left_on="소관기관", right_on="전체기관명")
new_df.replace({np.nan: None}, inplace=True)
# 소관기관이 여러개 인 경우가 있음
for idx, row in new_df.iterrows():
if row['소관기관'] != None and row['기관코드'] == None:
org_list = row["소관기관"].split(",")
tmp_code = []
for orgName in org_list:
orgCode = df1[df1['전체기관명'] == orgName]['기관코드'].values[0]
tmp_code.append(orgCode)
tmp_code = str(tmp_code).replace('[', '').replace(']', '').replace("'", "").replace(" ","").strip()
new_df.iloc[idx, new_df.columns.get_loc('기관코드')] = tmp_code
해당 코드의 결과는 아래 데이터 프레임과 같다.
new_df