使用python语言进行全年一次性奖金个人所得税计算以及临界值分析

按照税务局的规定,员工的全年一次性奖金每年可享受一次按照除以12的商数确定税率计算个人所得税的优惠算法。网上又有人说该算法下存在个人所得税的盲区,在该盲区内多发1元奖金将会使交的税比增加的奖金还多。

为了验证该说法,我曾尝试在LibreOffice中用电子表格下公式进行计算,但是由于公式复杂且数据量大,很难完成。最终发现使用python配合pandas库可以非常快速地完成计算。

请看以下的代码,使用该代码可以在8秒钟内计算出1万至1百万(10000, 1000000)区间内每1元奖金变动对应的税率、速算扣除数、应纳税额、实际所得等信息。结果数据集占用的内存为60.4MB,该数据集导出为csv格式后占用的硬盘空间为77MB (可见数据量的确很大)。

可在python中利用该数据集进一步进行个人所得税临界点等各种分析,而不用导出为csv格式 – 在excel中操作如此大的数据集是不可能的。

#!/usr/bin/env python3
# coding: utf-8

import pandas as pd

def get_level(salary_amount):
    if (salary_amount <= 1500):
        return {'rate': 3, 'deduction': 0}
    elif (salary_amount > 1500 and salary_amount <= 4500):
        return {'rate': 10, 'deduction': 105}
    elif (salary_amount > 4500 and salary_amount <= 9000):
        return {'rate': 20, 'deduction': 555}
    elif (salary_amount > 9000 and salary_amount <= 35000):
        return {'rate': 25, 'deduction': 1005}
    elif (salary_amount > 35000 and salary_amount <= 55000):
        return {'rate': 30, 'deduction': 2755}
    elif (salary_amount > 55000 and salary_amount <= 80000):
        return {'rate': 35, 'deduction': 5505}
    elif (salary_amount > 80000 and salary_amount <= 999999999):
        return {'rate': 45, 'deduction': 13505}
    elif (salary_amount == 0):
        return {'rate': 0, 'deduction': 0}

def calculate(salary_amount, method="normal"):
    if (method == "normal"):
        basis = salary_amount - 3500
        lv = get_level(basis)
    elif (method == "divide_12"):
        basis = salary_amount
        lv = get_level(basis/12)
    tax_rate = lv['rate'] / 100
    deduction = lv['deduction']
    tax_amount = basis * tax_rate - deduction
    return {u'税率': tax_rate, u'速算扣除数': deduction, u'应纳税额': tax_amount}

def calculates(bonus):
    result = pd.DataFrame()
    result[u'奖金金额'] = list(bonus)
    result[u'除以12的商'] =  result[u'奖金金额'] / 12
    tax_df = pd.DataFrame([calculate(b, method='divide_12') for b in bonus])
    result[tax_df.columns.tolist()] = tax_df
    result[u'税后所得'] = result[u'奖金金额'] - result[u'应纳税额']
    result[u'实际税负'] = result[u'应纳税额'] / result[u'奖金金额']
    
    return result

if __name__ == '__main__':

    bonus = range(10000, 1000000)
    result = calculates(bonus)
    print(result)
    print()
    # result.to_csv(r'H:\scripts\python\tax\tax_details.csv')
    
    # 临界点分析
    rates = result.税率.unique()
    for rate in rates:
        print(result[result.税率 == rate].iloc[0] # 适用税率第一个升高的值就是临界值
        print()

输出:

          奖金金额        除以12的商       应纳税额    税率  速算扣除数       税后所得      实际税负
0        10000    833.333333     300.00  0.03      0    9700.00  0.030000
1        10001    833.416667     300.03  0.03      0    9700.97  0.030000
2        10002    833.500000     300.06  0.03      0    9701.94  0.030000
3        10003    833.583333     300.09  0.03      0    9702.91  0.030000
4        10004    833.666667     300.12  0.03      0    9703.88  0.030000
5        10005    833.750000     300.15  0.03      0    9704.85  0.030000
6        10006    833.833333     300.18  0.03      0    9705.82  0.030000
7        10007    833.916667     300.21  0.03      0    9706.79  0.030000
8        10008    834.000000     300.24  0.03      0    9707.76  0.030000
9        10009    834.083333     300.27  0.03      0    9708.73  0.030000
10       10010    834.166667     300.30  0.03      0    9709.70  0.030000
11       10011    834.250000     300.33  0.03      0    9710.67  0.030000
12       10012    834.333333     300.36  0.03      0    9711.64  0.030000
13       10013    834.416667     300.39  0.03      0    9712.61  0.030000
14       10014    834.500000     300.42  0.03      0    9713.58  0.030000
15       10015    834.583333     300.45  0.03      0    9714.55  0.030000
16       10016    834.666667     300.48  0.03      0    9715.52  0.030000
17       10017    834.750000     300.51  0.03      0    9716.49  0.030000
18       10018    834.833333     300.54  0.03      0    9717.46  0.030000
19       10019    834.916667     300.57  0.03      0    9718.43  0.030000
20       10020    835.000000     300.60  0.03      0    9719.40  0.030000
21       10021    835.083333     300.63  0.03      0    9720.37  0.030000
22       10022    835.166667     300.66  0.03      0    9721.34  0.030000
23       10023    835.250000     300.69  0.03      0    9722.31  0.030000
24       10024    835.333333     300.72  0.03      0    9723.28  0.030000
25       10025    835.416667     300.75  0.03      0    9724.25  0.030000
26       10026    835.500000     300.78  0.03      0    9725.22  0.030000
27       10027    835.583333     300.81  0.03      0    9726.19  0.030000
28       10028    835.666667     300.84  0.03      0    9727.16  0.030000
29       10029    835.750000     300.87  0.03      0    9728.13  0.030000
...        ...           ...        ...   ...    ...        ...       ...
989970  999970  83330.833333  436481.50  0.45  13505  563488.50  0.436495
989971  999971  83330.916667  436481.95  0.45  13505  563489.05  0.436495
989972  999972  83331.000000  436482.40  0.45  13505  563489.60  0.436495
989973  999973  83331.083333  436482.85  0.45  13505  563490.15  0.436495
989974  999974  83331.166667  436483.30  0.45  13505  563490.70  0.436495
989975  999975  83331.250000  436483.75  0.45  13505  563491.25  0.436495
989976  999976  83331.333333  436484.20  0.45  13505  563491.80  0.436495
989977  999977  83331.416667  436484.65  0.45  13505  563492.35  0.436495
989978  999978  83331.500000  436485.10  0.45  13505  563492.90  0.436495
989979  999979  83331.583333  436485.55  0.45  13505  563493.45  0.436495
989980  999980  83331.666667  436486.00  0.45  13505  563494.00  0.436495
989981  999981  83331.750000  436486.45  0.45  13505  563494.55  0.436495
989982  999982  83331.833333  436486.90  0.45  13505  563495.10  0.436495
989983  999983  83331.916667  436487.35  0.45  13505  563495.65  0.436495
989984  999984  83332.000000  436487.80  0.45  13505  563496.20  0.436495
989985  999985  83332.083333  436488.25  0.45  13505  563496.75  0.436495
989986  999986  83332.166667  436488.70  0.45  13505  563497.30  0.436495
989987  999987  83332.250000  436489.15  0.45  13505  563497.85  0.436495
989988  999988  83332.333333  436489.60  0.45  13505  563498.40  0.436495
989989  999989  83332.416667  436490.05  0.45  13505  563498.95  0.436495
989990  999990  83332.500000  436490.50  0.45  13505  563499.50  0.436495
989991  999991  83332.583333  436490.95  0.45  13505  563500.05  0.436495
989992  999992  83332.666667  436491.40  0.45  13505  563500.60  0.436495
989993  999993  83332.750000  436491.85  0.45  13505  563501.15  0.436495
989994  999994  83332.833333  436492.30  0.45  13505  563501.70  0.436495
989995  999995  83332.916667  436492.75  0.45  13505  563502.25  0.436495
989996  999996  83333.000000  436493.20  0.45  13505  563502.80  0.436495
989997  999997  83333.083333  436493.65  0.45  13505  563503.35  0.436495
989998  999998  83333.166667  436494.10  0.45  13505  563503.90  0.436495
989999  999999  83333.250000  436494.55  0.45  13505  563504.45  0.436495

[990000 rows x 7 columns]

奖金金额      10000.000000
除以12的商      833.333333
应纳税额        300.000000
税率            0.030000
速算扣除数         0.000000
税后所得       9700.000000
实际税负          0.030000
Name: 0, dtype: float64

奖金金额      18001.000000
除以12的商     1500.083333
应纳税额       1695.100000
税率            0.100000
速算扣除数       105.000000
税后所得      16305.900000
实际税负          0.094167
Name: 8001, dtype: float64

奖金金额      54001.000000
除以12的商     4500.083333
应纳税额      10245.200000
税率            0.200000
速算扣除数       555.000000
税后所得      43755.800000
实际税负          0.189722
Name: 44001, dtype: float64

奖金金额      108001.000000
除以12的商      9000.083333
应纳税额       25995.250000
税率             0.250000
速算扣除数       1005.000000
税后所得       82005.750000
实际税负           0.240695
Name: 98001, dtype: float64

奖金金额      420001.000000
除以12的商     35000.083333
应纳税额      123245.300000
税率             0.300000
速算扣除数       2755.000000
税后所得      296755.700000
实际税负           0.293440
Name: 410001, dtype: float64

奖金金额      660001.000000
除以12的商     55000.083333
应纳税额      225495.350000
税率             0.350000
速算扣除数       5505.000000
税后所得      434505.650000
实际税负           0.341659
Name: 650001, dtype: float64

奖金金额      960001.000000
除以12的商     80000.083333
应纳税额      418495.450000
税率             0.450000
速算扣除数      13505.000000
税后所得      541505.550000
实际税负           0.435932
Name: 950001, dtype: float64

发表评论

电子邮件地址不会被公开。 必填项已用*标注