[pandas] 서로 다른 데이터프레임에서 특정 값을 매핑해 새로운 컬럼 만들기

솜솜·2022년 11월 2일
0
  • 기관코드와 전체기관명으로 구성된 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

profile
매번 잊어버리는 것들을 기록합니다.

0개의 댓글