아미(아름다운미소)

pandas 참조 df 특정 컬럼값으로 값채우기 본문

랭귀지/pandas

pandas 참조 df 특정 컬럼값으로 값채우기

유키공 2024. 7. 19. 23:25

일치값 없으면 원본값유지

import pandas as pd

# df1 생성
df1 = pd.DataFrame({
    'a': [1, 2, 3, 1, 2, 3, 4],
    'b': [10, 20, 30, 40, 50, 60, 70],
    'c': [100, 200, 300, 400, 500, 600, 700],
    'd': [1000, 2000, 3000, 4000, 5000, 6000, 7000]
})

# 수정된 df2 생성 (a-1을 5, 6, 7로 변경)
df2 = pd.DataFrame({
    'a-1': [5, 6, 7],
    'b-1': [15, 25, 35]  # 각 a-1에 해당하는 b-1 값
})

# Left Outer Join 수행 (a와 a-1을 키로 사용)
left_outer_join_df = pd.merge(df1, df2, left_on='a', right_on='a-1', how='left')

# b 컬럼 업데이트 (b-1을 사용하여 업데이트, NaN인 경우 원래 b 유지)
left_outer_join_df['b'] = left_outer_join_df['b-1'].fillna(left_outer_join_df['b'])

# 불필요한 b-1 및 a-1 컬럼 제거
left_outer_join_df = left_outer_join_df.drop(columns=['b-1', 'a-1'])

# 결과 출력
print(left_outer_join_df)

예제1

import pandas as pd

# df1 생성
df1 = pd.DataFrame({
    'a': [1, 2, 3, 1, 2, 3, 4],
    'b': [10, 20, 30, 40, 50, 60, 70],
    'c': [100, 200, 300, 400, 500, 600, 700],
    'd': [1000, 2000, 3000, 4000, 5000, 6000, 7000]
})

# 수정된 df2 생성 (a 값이 1, 2, 3)
df2 = pd.DataFrame({
    'a': [1, 2, 3],
    'b': [15, 25, 35]  # 각 a에 해당하는 b 값
})

# Left Outer Join 수행
left_outer_join_df = pd.merge(df1, df2, on='a', how='left', suffixes=('', '_new'))

# b 컬럼 업데이트
left_outer_join_df['b'] = left_outer_join_df['b_new'].combine_first(left_outer_join_df['b'])

# 불필요한 b_new 컬럼 제거
left_outer_join_df = left_outer_join_df.drop(columns=['b_new'])

# 결과 출력
print(left_outer_join_df)

결과

   a   b    c     d
0  1  15  100  1000
1  2  25  200  2000
2  3  35  300  3000
3  1  15  400  4000
4  2  25  500  5000
5  3  35  600  6000
6  4  70  700  7000

예제2

import pandas as pd

# df1 생성
df1 = pd.DataFrame({
    'a': [1, 2, 3, 1, 2, 3, 4],
    'b': [10, 20, 30, 40, 50, 60, 70],
    'c': [100, 200, 300, 400, 500, 600, 700],
    'd': [1000, 2000, 3000, 4000, 5000, 6000, 7000]
})

# 수정된 df2 생성 (a-1을 키로 사용)
df2 = pd.DataFrame({
    'a-1': [1, 2, 3],
    'b': [15, 25, 35]  # 각 a에 해당하는 b 값
})

# Left Outer Join 수행 (a와 a-1을 키로 사용)
left_outer_join_df = pd.merge(df1, df2, left_on='a', right_on='a-1', how='left', suffixes=('', '_new'))

# b 컬럼 업데이트
left_outer_join_df['b'] = left_outer_join_df['b_new'].combine_first(left_outer_join_df['b'])

# 불필요한 b_new 및 a-1 컬럼 제거
left_outer_join_df = left_outer_join_df.drop(columns=['b_new', 'a-1'])

# 결과 출력
print(left_outer_join_df)

결과

   a   b    c     d
0  1  15  100  1000
1  2  25  200  2000
2  3  35  300  3000
3  1  15  400  4000
4  2  25  500  5000
5  3  35  600  6000
6  4  70  700  7000

예제3

import pandas as pd

# df1 생성
df1 = pd.DataFrame({
    'a': [1, 2, 3, 1, 2, 3, 4],
    'b': [10, 20, 30, 40, 50, 60, 70],
    'c': [100, 200, 300, 400, 500, 600, 700],
    'd': [1000, 2000, 3000, 4000, 5000, 6000, 7000]
})

# 수정된 df2 생성 (b를 b-1로 변경)
df2 = pd.DataFrame({
    'a-1': [1, 2, 3],
    'b-1': [15, 25, 35]  # 각 a에 해당하는 b-1 값
})

# Left Outer Join 수행 (a와 a-1을 키로 사용)
left_outer_join_df = pd.merge(df1, df2, left_on='a', right_on='a-1', how='left', suffixes=('', '_new'))

# b 컬럼 업데이트 (b-1을 사용하여 업데이트)
left_outer_join_df['b'] = left_outer_join_df['b-1'].combine_first(left_outer_join_df['b'])

# 불필요한 b-1 및 a-1 컬럼 제거
left_outer_join_df = left_outer_join_df.drop(columns=['b-1', 'a-1'])

# 결과 출력
print(left_outer_join_df)

결과

   a   b    c     d
0  1  15  100  1000
1  2  25  200  2000
2  3  35  300  3000
3  1  15  400  4000
4  2  25  500  5000
5  3  35  600  6000
6  4  70  700  7000

'랭귀지 > pandas' 카테고리의 다른 글

pandas 컬럼이름을 마지막으로이동  (0) 2024.07.22
pandas 컬럼값변경  (0) 2024.07.20
pandas dataframe 컬럼비교  (0) 2024.07.18
pandas filter  (0) 2024.07.17
pandas 여러열적용  (0) 2024.07.16
Comments