Created
May 22, 2023 09:18
-
-
Save sheriffff/40bff11d8085f1a0abcb4a2b33be405a to your computer and use it in GitHub Desktop.
IRPF: el mapeo bruto a neto podría ser continuo, y no por tramos...
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 56, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import numpy as np\n", | |
"import pandas as pd" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 51, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# cada tramo es (euros_hasta, perc_irpf)\n", | |
"tramos = [\n", | |
" (12450, 19),\n", | |
" (20200, 24),\n", | |
" (35200, 30),\n", | |
" (60000, 37),\n", | |
" (float(\"inf\"), 45) \n", | |
"]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 185, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"tramos = pd.DataFrame(tramos, columns=[\"stop_eur\", \"perc\"])\n", | |
"tramos[\"stop_eur_prev\"] = tramos.stop_eur.shift(1).fillna(0)\n", | |
"tramos[\"stop_eur_diff\"] = tramos.stop_eur - tramos.stop_eur_prev" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 186, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>stop_eur</th>\n", | |
" <th>perc</th>\n", | |
" <th>stop_eur_prev</th>\n", | |
" <th>stop_eur_diff</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>12450.0</td>\n", | |
" <td>19</td>\n", | |
" <td>0.0</td>\n", | |
" <td>12450.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>20200.0</td>\n", | |
" <td>24</td>\n", | |
" <td>12450.0</td>\n", | |
" <td>7750.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>35200.0</td>\n", | |
" <td>30</td>\n", | |
" <td>20200.0</td>\n", | |
" <td>15000.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>60000.0</td>\n", | |
" <td>37</td>\n", | |
" <td>35200.0</td>\n", | |
" <td>24800.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>inf</td>\n", | |
" <td>45</td>\n", | |
" <td>60000.0</td>\n", | |
" <td>inf</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" stop_eur perc stop_eur_prev stop_eur_diff\n", | |
"0 12450.0 19 0.0 12450.0\n", | |
"1 20200.0 24 12450.0 7750.0\n", | |
"2 35200.0 30 20200.0 15000.0\n", | |
"3 60000.0 37 35200.0 24800.0\n", | |
"4 inf 45 60000.0 inf" | |
] | |
}, | |
"execution_count": 186, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"tramos" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 97, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def get_deducciones(bruto):\n", | |
" deducciones = 0\n", | |
"\n", | |
" for _, t in tramos.iterrows():\n", | |
" if bruto > t.stop_eur:\n", | |
" deducciones += t.stop_eur_diff * t.perc / 100\n", | |
" else:\n", | |
" deducciones += (bruto - t.stop_eur_prev) * t.perc / 100\n", | |
" break\n", | |
" \n", | |
" return deducciones" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 135, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"bs = np.arange(10000, 100000, 1000)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 136, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"ds = np.array(list(map(get_deducciones, bs)))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 137, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import matplotlib.pyplot as plt" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 138, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[<matplotlib.lines.Line2D at 0x7f6fa72f8c10>]" | |
] | |
}, | |
"execution_count": 138, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"plt.plot(bs, ds)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 139, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"df = pd.DataFrame({\"brutos\": bs, \"deducciones\": ds})" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Quiero la relación $$deducción = k * bruto ^ N$$ luego hago $$log(deduccion) = log(k) + N log(bruto)$$" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 140, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"df[\"logd\"] = np.log10(df.deducciones)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 141, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"df[\"logb\"] = np.log10(df.brutos)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 142, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>brutos</th>\n", | |
" <th>deducciones</th>\n", | |
" <th>logd</th>\n", | |
" <th>logb</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>10000</td>\n", | |
" <td>1900.0</td>\n", | |
" <td>3.278754</td>\n", | |
" <td>4.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>11000</td>\n", | |
" <td>2090.0</td>\n", | |
" <td>3.320146</td>\n", | |
" <td>4.041393</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>12000</td>\n", | |
" <td>2280.0</td>\n", | |
" <td>3.357935</td>\n", | |
" <td>4.079181</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>13000</td>\n", | |
" <td>2497.5</td>\n", | |
" <td>3.397505</td>\n", | |
" <td>4.113943</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>14000</td>\n", | |
" <td>2737.5</td>\n", | |
" <td>3.437354</td>\n", | |
" <td>4.146128</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" brutos deducciones logd logb\n", | |
"0 10000 1900.0 3.278754 4.000000\n", | |
"1 11000 2090.0 3.320146 4.041393\n", | |
"2 12000 2280.0 3.357935 4.079181\n", | |
"3 13000 2497.5 3.397505 4.113943\n", | |
"4 14000 2737.5 3.437354 4.146128" | |
] | |
}, | |
"execution_count": 142, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"df.head()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 148, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"N, logk = np.polyfit(df.logb, df.logd, 1)\n", | |
"k = 10 ** logk" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 157, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"N = N.round(2)\n", | |
"k = k.round(3)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 158, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"(1.32, 0.009)" | |
] | |
}, | |
"execution_count": 158, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"N, k" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Es decir, $$deducción = 0.00937 * bruto ^ {1.316} \\sim bruto * (bruto ^ {0.31} / 100) $$" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Es decir, tu porcentaje de IRPF es $$\\%_{IRFP} = bruto ^ {0.31}$$" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 159, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def get_perc_irpf(bruto):\n", | |
" return bruto ** 0.31" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 160, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def get_deducciones_approx(bruto):\n", | |
" perc = get_perc_irpf(bruto)\n", | |
" \n", | |
" deduccion = bruto * perc / 100\n", | |
" \n", | |
" return deduccion" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 161, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"df[\"dapprox\"] = df.brutos.map(get_deducciones_approx).round()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 162, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>brutos</th>\n", | |
" <th>deducciones</th>\n", | |
" <th>logd</th>\n", | |
" <th>logb</th>\n", | |
" <th>dapprox</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>10000</td>\n", | |
" <td>1900.0</td>\n", | |
" <td>3.278754</td>\n", | |
" <td>4.000000</td>\n", | |
" <td>1738.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>11000</td>\n", | |
" <td>2090.0</td>\n", | |
" <td>3.320146</td>\n", | |
" <td>4.041393</td>\n", | |
" <td>1969.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>12000</td>\n", | |
" <td>2280.0</td>\n", | |
" <td>3.357935</td>\n", | |
" <td>4.079181</td>\n", | |
" <td>2207.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>13000</td>\n", | |
" <td>2497.5</td>\n", | |
" <td>3.397505</td>\n", | |
" <td>4.113943</td>\n", | |
" <td>2451.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>14000</td>\n", | |
" <td>2737.5</td>\n", | |
" <td>3.437354</td>\n", | |
" <td>4.146128</td>\n", | |
" <td>2700.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>...</th>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>85</th>\n", | |
" <td>95000</td>\n", | |
" <td>33651.5</td>\n", | |
" <td>4.527004</td>\n", | |
" <td>4.977724</td>\n", | |
" <td>33176.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>86</th>\n", | |
" <td>96000</td>\n", | |
" <td>34101.5</td>\n", | |
" <td>4.532773</td>\n", | |
" <td>4.982271</td>\n", | |
" <td>33634.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>87</th>\n", | |
" <td>97000</td>\n", | |
" <td>34551.5</td>\n", | |
" <td>4.538467</td>\n", | |
" <td>4.986772</td>\n", | |
" <td>34093.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>88</th>\n", | |
" <td>98000</td>\n", | |
" <td>35001.5</td>\n", | |
" <td>4.544087</td>\n", | |
" <td>4.991226</td>\n", | |
" <td>34555.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>89</th>\n", | |
" <td>99000</td>\n", | |
" <td>35451.5</td>\n", | |
" <td>4.549635</td>\n", | |
" <td>4.995635</td>\n", | |
" <td>35017.0</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"<p>90 rows × 5 columns</p>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" brutos deducciones logd logb dapprox\n", | |
"0 10000 1900.0 3.278754 4.000000 1738.0\n", | |
"1 11000 2090.0 3.320146 4.041393 1969.0\n", | |
"2 12000 2280.0 3.357935 4.079181 2207.0\n", | |
"3 13000 2497.5 3.397505 4.113943 2451.0\n", | |
"4 14000 2737.5 3.437354 4.146128 2700.0\n", | |
".. ... ... ... ... ...\n", | |
"85 95000 33651.5 4.527004 4.977724 33176.0\n", | |
"86 96000 34101.5 4.532773 4.982271 33634.0\n", | |
"87 97000 34551.5 4.538467 4.986772 34093.0\n", | |
"88 98000 35001.5 4.544087 4.991226 34555.0\n", | |
"89 99000 35451.5 4.549635 4.995635 35017.0\n", | |
"\n", | |
"[90 rows x 5 columns]" | |
] | |
}, | |
"execution_count": 162, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"df" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 175, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"df[\"err_abs\"] = (df.deducciones - df.dapprox).abs()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 178, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"df[\"err_rel\"] = (df.deducciones / df.dapprox)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 184, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>brutos</th>\n", | |
" <th>deducciones</th>\n", | |
" <th>logd</th>\n", | |
" <th>logb</th>\n", | |
" <th>dapprox</th>\n", | |
" <th>err_abs</th>\n", | |
" <th>err_rel</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>10</th>\n", | |
" <td>20000</td>\n", | |
" <td>4177.5</td>\n", | |
" <td>3.620916</td>\n", | |
" <td>4.301030</td>\n", | |
" <td>4309.0</td>\n", | |
" <td>131.5</td>\n", | |
" <td>0.969482</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>20</th>\n", | |
" <td>30000</td>\n", | |
" <td>7165.5</td>\n", | |
" <td>3.855247</td>\n", | |
" <td>4.477121</td>\n", | |
" <td>7329.0</td>\n", | |
" <td>163.5</td>\n", | |
" <td>0.977691</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>30</th>\n", | |
" <td>40000</td>\n", | |
" <td>10501.5</td>\n", | |
" <td>4.021251</td>\n", | |
" <td>4.602060</td>\n", | |
" <td>10683.0</td>\n", | |
" <td>181.5</td>\n", | |
" <td>0.983010</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>40</th>\n", | |
" <td>50000</td>\n", | |
" <td>14201.5</td>\n", | |
" <td>4.152334</td>\n", | |
" <td>4.698970</td>\n", | |
" <td>14310.0</td>\n", | |
" <td>108.5</td>\n", | |
" <td>0.992418</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>50</th>\n", | |
" <td>60000</td>\n", | |
" <td>17901.5</td>\n", | |
" <td>4.252889</td>\n", | |
" <td>4.778151</td>\n", | |
" <td>18171.0</td>\n", | |
" <td>269.5</td>\n", | |
" <td>0.985169</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>60</th>\n", | |
" <td>70000</td>\n", | |
" <td>22401.5</td>\n", | |
" <td>4.350277</td>\n", | |
" <td>4.845098</td>\n", | |
" <td>22237.0</td>\n", | |
" <td>164.5</td>\n", | |
" <td>1.007398</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>70</th>\n", | |
" <td>80000</td>\n", | |
" <td>26901.5</td>\n", | |
" <td>4.429776</td>\n", | |
" <td>4.903090</td>\n", | |
" <td>26488.0</td>\n", | |
" <td>413.5</td>\n", | |
" <td>1.015611</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" brutos deducciones logd logb dapprox err_abs err_rel\n", | |
"10 20000 4177.5 3.620916 4.301030 4309.0 131.5 0.969482\n", | |
"20 30000 7165.5 3.855247 4.477121 7329.0 163.5 0.977691\n", | |
"30 40000 10501.5 4.021251 4.602060 10683.0 181.5 0.983010\n", | |
"40 50000 14201.5 4.152334 4.698970 14310.0 108.5 0.992418\n", | |
"50 60000 17901.5 4.252889 4.778151 18171.0 269.5 0.985169\n", | |
"60 70000 22401.5 4.350277 4.845098 22237.0 164.5 1.007398\n", | |
"70 80000 26901.5 4.429776 4.903090 26488.0 413.5 1.015611" | |
] | |
}, | |
"execution_count": 184, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"df[df.brutos.isin(np.arange(20000, 90000, 10000))]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 177, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>brutos</th>\n", | |
" <th>deducciones</th>\n", | |
" <th>logd</th>\n", | |
" <th>logb</th>\n", | |
" <th>dapprox</th>\n", | |
" <th>err_abs</th>\n", | |
" <th>err_rel</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>10000</td>\n", | |
" <td>1900.0</td>\n", | |
" <td>3.278754</td>\n", | |
" <td>4.000000</td>\n", | |
" <td>1738.0</td>\n", | |
" <td>162.0</td>\n", | |
" <td>109.321059</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>11000</td>\n", | |
" <td>2090.0</td>\n", | |
" <td>3.320146</td>\n", | |
" <td>4.041393</td>\n", | |
" <td>1969.0</td>\n", | |
" <td>121.0</td>\n", | |
" <td>106.145251</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>12000</td>\n", | |
" <td>2280.0</td>\n", | |
" <td>3.357935</td>\n", | |
" <td>4.079181</td>\n", | |
" <td>2207.0</td>\n", | |
" <td>73.0</td>\n", | |
" <td>103.307657</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>13000</td>\n", | |
" <td>2497.5</td>\n", | |
" <td>3.397505</td>\n", | |
" <td>4.113943</td>\n", | |
" <td>2451.0</td>\n", | |
" <td>46.5</td>\n", | |
" <td>101.897185</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>14000</td>\n", | |
" <td>2737.5</td>\n", | |
" <td>3.437354</td>\n", | |
" <td>4.146128</td>\n", | |
" <td>2700.0</td>\n", | |
" <td>37.5</td>\n", | |
" <td>101.388889</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>...</th>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>85</th>\n", | |
" <td>95000</td>\n", | |
" <td>33651.5</td>\n", | |
" <td>4.527004</td>\n", | |
" <td>4.977724</td>\n", | |
" <td>33176.0</td>\n", | |
" <td>475.5</td>\n", | |
" <td>101.433265</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>86</th>\n", | |
" <td>96000</td>\n", | |
" <td>34101.5</td>\n", | |
" <td>4.532773</td>\n", | |
" <td>4.982271</td>\n", | |
" <td>33634.0</td>\n", | |
" <td>467.5</td>\n", | |
" <td>101.389963</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>87</th>\n", | |
" <td>97000</td>\n", | |
" <td>34551.5</td>\n", | |
" <td>4.538467</td>\n", | |
" <td>4.986772</td>\n", | |
" <td>34093.0</td>\n", | |
" <td>458.5</td>\n", | |
" <td>101.344851</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>88</th>\n", | |
" <td>98000</td>\n", | |
" <td>35001.5</td>\n", | |
" <td>4.544087</td>\n", | |
" <td>4.991226</td>\n", | |
" <td>34555.0</td>\n", | |
" <td>446.5</td>\n", | |
" <td>101.292143</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>89</th>\n", | |
" <td>99000</td>\n", | |
" <td>35451.5</td>\n", | |
" <td>4.549635</td>\n", | |
" <td>4.995635</td>\n", | |
" <td>35017.0</td>\n", | |
" <td>434.5</td>\n", | |
" <td>101.240826</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"<p>90 rows × 7 columns</p>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" brutos deducciones logd logb dapprox err_abs err_rel\n", | |
"0 10000 1900.0 3.278754 4.000000 1738.0 162.0 109.321059\n", | |
"1 11000 2090.0 3.320146 4.041393 1969.0 121.0 106.145251\n", | |
"2 12000 2280.0 3.357935 4.079181 2207.0 73.0 103.307657\n", | |
"3 13000 2497.5 3.397505 4.113943 2451.0 46.5 101.897185\n", | |
"4 14000 2737.5 3.437354 4.146128 2700.0 37.5 101.388889\n", | |
".. ... ... ... ... ... ... ...\n", | |
"85 95000 33651.5 4.527004 4.977724 33176.0 475.5 101.433265\n", | |
"86 96000 34101.5 4.532773 4.982271 33634.0 467.5 101.389963\n", | |
"87 97000 34551.5 4.538467 4.986772 34093.0 458.5 101.344851\n", | |
"88 98000 35001.5 4.544087 4.991226 34555.0 446.5 101.292143\n", | |
"89 99000 35451.5 4.549635 4.995635 35017.0 434.5 101.240826\n", | |
"\n", | |
"[90 rows x 7 columns]" | |
] | |
}, | |
"execution_count": 177, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"df[\"irpf_perc_real\"]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 134, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>stop_eur</th>\n", | |
" <th>perc</th>\n", | |
" <th>stop_eur_prev</th>\n", | |
" <th>stop_eur_diff</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>12450.0</td>\n", | |
" <td>19</td>\n", | |
" <td>0.0</td>\n", | |
" <td>12450.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>20200.0</td>\n", | |
" <td>24</td>\n", | |
" <td>12450.0</td>\n", | |
" <td>7750.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>35200.0</td>\n", | |
" <td>30</td>\n", | |
" <td>20200.0</td>\n", | |
" <td>15000.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>60000.0</td>\n", | |
" <td>37</td>\n", | |
" <td>35200.0</td>\n", | |
" <td>24800.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>inf</td>\n", | |
" <td>45</td>\n", | |
" <td>60000.0</td>\n", | |
" <td>inf</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" stop_eur perc stop_eur_prev stop_eur_diff\n", | |
"0 12450.0 19 0.0 12450.0\n", | |
"1 20200.0 24 12450.0 7750.0\n", | |
"2 35200.0 30 20200.0 15000.0\n", | |
"3 60000.0 37 35200.0 24800.0\n", | |
"4 inf 45 60000.0 inf" | |
] | |
}, | |
"execution_count": 134, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"tramos" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 169, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[(5000, 14.0),\n", | |
" (15000, 19.7),\n", | |
" (25000, 23.1),\n", | |
" (35000, 25.6),\n", | |
" (45000, 27.7),\n", | |
" (55000, 29.5),\n", | |
" (65000, 31.0),\n", | |
" (75000, 32.5),\n", | |
" (85000, 33.7),\n", | |
" (95000, 34.9),\n", | |
" (105000, 36.0),\n", | |
" (115000, 37.1),\n", | |
" (125000, 38.0),\n", | |
" (135000, 38.9),\n", | |
" (145000, 39.8),\n", | |
" (155000, 40.6),\n", | |
" (165000, 41.4),\n", | |
" (175000, 42.2),\n", | |
" (185000, 42.9),\n", | |
" (195000, 43.6)]" | |
] | |
}, | |
"execution_count": 169, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"[(bruto, round(get_perc_irpf(bruto), 1)) for bruto in np.arange(5000, 205000, 10000)]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 171, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"0.4045075" | |
] | |
}, | |
"execution_count": 171, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"get_deducciones(200000) / 200000" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.7.6" | |
}, | |
"toc": { | |
"base_numbering": 1, | |
"nav_menu": {}, | |
"number_sections": true, | |
"sideBar": true, | |
"skip_h1_title": false, | |
"title_cell": "Table of Contents", | |
"title_sidebar": "Contents", | |
"toc_cell": false, | |
"toc_position": {}, | |
"toc_section_display": true, | |
"toc_window_display": false | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment