컴퓨터/Python

python pandas 간이세액표 merge_asof

풍경소리^^ 2025. 1. 14. 16:53
import pandas as pd

# # 간이세율표 데이터프레임 생성
# tax_table = pd.DataFrame({
#     '이상': [770, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000],
#     '미만': [1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 3000],
#     '1': [0, 1600, 2990, 4740, 6800, 8920, 10980, 13050, 15110, 17180, 19520],
#     '2': [0, 0, 0, 0, 2300, 4420, 6480, 8550, 10610, 12680, 14750],
#     # 필요한 경우 다른 열 추가
# })
# 엑셀 파일 읽기
file_path = '샘플간이세액표.xlsx'
tax_table = pd.read_excel(file_path, sheet_name='Sheet1')

# 소득 구간을 Interval로 변환
tax_table['소득구간'] = pd.IntervalIndex.from_arrays(tax_table['이상'], tax_table['미만'], closed='left')

# 직원 데이터프레임 생성
employees = pd.DataFrame({
    '이름': ['갑', '을', '병'],
    '소득': [1101, 1500, 2000],
    '부양가족수': [1, 2, 3]
})

# 부양가족수 열 추가 및 데이터 타입 맞추기
tax_table = tax_table.melt(id_vars=['이상', '미만', '소득구간'], var_name='부양가족수', value_name='소득세')
tax_table['부양가족수'] = tax_table['부양가족수'].astype(int)
employees['부양가족수'] = employees['부양가족수'].astype(int)

# merge_asof를 사용하여 소득세 계산
result = pd.merge_asof(employees.sort_values('소득'), 
                       tax_table.sort_values('이상'), 
                       left_on='소득', 
                       right_on='이상', 
                       by='부양가족수', 
                       direction='backward')

# 결과 출력
print(result[['이름', '소득', '부양가족수', '소득세']])

 

샘플간이세액표.xlsx
0.01MB