컴퓨터/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[['이름', '소득', '부양가족수', '소득세']])