티스토리 뷰

  • 기관코드와 전체기관명으로 구성된 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

해당 코드의 결과는 아래 데이터 프레임과 같다.

  • df1, df2를 merge하고 특정 값을 찾아 매핑한 값을 넣은 new_df

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함