Variabili indipendenti:
6) Interbank Ratio (%)
3.4 - Andamento delle variabili nel periodo considerato
Al fine di rendere più semplice l’analisi si riporta sotto anche l’andamento della media e della mediana all’interno del campione di ogni singola variabile, mantenendo l’ordine di presentazione precedente.
Grafico A2
Grafico A3
Grafico A5
Grafico A6
Se i primi gruppi di grafici ci mostrano perlopiù la distribuzione (compatta o meno) delle variabili, questa seconda classe di grafici racchiude già alcune informazioni interessanti.
In particolare, si nota l’impatto della crisi del 2011/2012 sulle banche europee: si osserva infatti dal grafico un contestuale periodo di riduzione dei profitti, di aumento degli NPL sul totale dei crediti erogati e una riduzione della percentuale di prestiti all’interno dell’attivo.
3.5 - Analisi dei risultati della regressione
Per iniziare l’analisi sono partito dai p-values delle diverse variabili indipendenti utilizzate, valutandoli di anno in anno, alla ricerca di variabili particolarmente significative per un livello di confidenza del 95%.
Plottando i p-values per i diversi anni si nota che tutte sono generalmente sotto il livello limite del 5% e quindi statisticamente significative.
Riporto qui anche i valori di R^2 nei diversi anni, per mostrare l’adeguatezza della regressione
Grafico B0
A questo punto è utile procedere plottando anche i coefficienti delle diverse variabili sui vari anni di osservazione, per poter così tirare le somme e fornire
un’interpretazione dei numeri.
Grafico B2
Grafico B3
Grafico B5
La prima cosa che si nota osservando i grafici è la differenza fra il coefficiente di regressione della prima e della seconda variabile (Net Loans / Total Assets (%) e Derivatives / Total Assets (%)): l’effetto positivo della percentuale degli strumenti derivati detenuti in portafoglio appare nettamente maggiore rispetto a quello della percentuale di prestiti all’interno dello stesso. Questo risulta ancora più interessante se posto in relazione al grafico A2, in cui si nota un trend di riduzione della
percentuale di asset derivati, abbinato al grafico B2, in cui si intravede un trend di crescita del peso dei derivati rispetto alla profittabilità della banca.
Possiamo quindi dire che il peso specifico degli asset derivati aumenta anche quando la loro percentuale sul totale degli attivi diminuisce.
Se invece osserviamo singolarmente il grafico B1 relativo a Net Loans/ Total Assests (%) risulta ben visibile che nel periodo caratterizzato dalla cosiddetta Crisi dei Debiti Sovrani (2011/2012) le banche europee abbiano sofferto una perdita di profittabilità dell’area crediti, con un coefficiente di regressione che si porta quasi a 0 nel 2012, per poi riassestarsi successivamente su livelli più alti (ma comunque minori di quelli connessi agli strumenti derivati).
Completa l’informazione sul mercato del credito il grafico B4, in cui si nota una (abbastanza ovvia) correlazione negativa fra la percentuale di NPL sul totale dei prestiti erogati e il margine di profitto.
Osservando più attentamente si nota che la percentuale di NPL tende a crescere a seguito del periodo 2011/2012, ristabilizzarsi brevemente negli anni successivi e crollare nel periodo 2017/2018.
Qui va sottolineato che appare molto probabile che il 2020 porterà il grafico verso il basso rispetto al 2019: una situazione come quella attuale connessa al Covid-19 non po' non aggravare la situazione NPL: come detto infatti in precedenza nella tesi, il mercato del credito lega le banche più tradizionali all’economia reale e quindi
percentuale di NPL sul totale, inoltre si pone anche il problema di una riduzione dei redditi privati connessi alle suddette attività, che vanno a creare difficoltà ai privati nel pagamento delle rate dei mutui e dei finanziamenti.
Per quanto riguarda il grafico B5, inerente all’ Interbank Ratio(%) , possiamo
osservare che il coefficiente di regressione risulta correlato positivamente col margine di profitto, e questo effetto è costante su tutto il periodo.
Essendo il ratio sostanzialmente formato dal rapporto fra attivi interbancari e passivi interbancari, possiamo sostenere che un maggiore impegno dell’attivo sul fronte interbancario ha effetti positivi sui profitti della banca.
Il problema qui sorge in base alle implicazione sistemiche dei prestiti interbancari: abbiamo quindi una cartina tornasole della interconnessione del comparto bancario. Un rapporto di questo genere implica che la banca si espone da un lato al rischio di una fuga di depositi da parte di altre banche creditrici (sul lato del passivo /
denominatore) e dall’altro si espone al rischio di default di un secondo gruppo di banche debitrici (lato attivo / numeratore).
Il fatto che questo ratio abbia correlazione positiva coi profitti, lascia supporre che l’interconnessione sia valutata positivamente dalle banche, in un ottica di
diversificazione di attivo e passivo.
Infine, il grafico B3 ci mostra che il margine d’interesse ha ancora un alto livello di correlazione coi profitti della banca, si nota però che questo coefficiente fluttua in modo abbastanza violento nel periodo considerato.
Queste fluttuazioni fanno intuire che una strategia di diversificazione è fondamentale per permettere alla banca di sopportare momenti di congiuntura negativa per il
mercato del credito.
In conclusione: i risultati della ricerca empirica confermano quanto detto in precedenza riguardo ad alcuni dei trend in corso nel settore bancario.
Si denota qui una maggiore ricerca di diversificazione, generalmente a discapito del business tradizionale della banca, basato su erogazione di prestiti e raccolta al
dettaglio tramite depositi.
Nelle sezioni precedenti si è già proceduto ad una ricerca all’interno della più recente letteratura specialistica, la quale ci permettesse di esprimere un giudizio
sull’adeguatezza di questi “mosse” da parte delle banche, una adeguatezza valutata alla luce del rinnovato interesse globale per la gestione del rischio sistemico.
Capitolo 4:
Conclusione
Prima di concludere è bene tirare le somme di questo lavoro da me portato avanti. Nella prima parte ho riportato alcuni risultati ottenuti dalla ricerca scientifica che ci spingono ad accettare come punto di partenza l'esistenza di una correlazione positiva fra Non Interest Income e rischio sistemico: in pratica, man mano che le banche ottengono i propri ricavi da attività diverse da quelle tradizionali (le quali sono legate fortemente ai tassi d'interesse) la stabilità del settore bancario e del sistema finanziario, di cui il primo è una componente centrale, viene inficiata.
Si può quindi considerare il business bancario tradizionale come qualcosa di più sicuro delle altre attività che una banca può intraprendere, però questo vale solo se guardiamo la situazione dal punto di vista sistemico: a livello di singola banca esiste un evidente vantaggio di riduzione delle probabilità di default e stabilizzazione dovuto ad una maggiore diversificazione delle fonti reddituali.
Sebbene non ci sia unanimità nel riconoscere questa relazione come significativa e positiva, penso di aver trovato materiale sufficiente per considerare questa come una credibile ipotesi di lavoro.
Il passo successivo nell'esposizione è stato quello di accertare l'importanza e la centralità del NII e del suo doppio: la diversificazione operativa.
Perchè, se le attività tradizionali della banca risultano più sicure delle altre a livello sistemico i dati mostrano che la quota di NII rispetto al margine d'interesse continua a crescere?
Ho proceduto quindi cercando elementi che potessero non solo spiegare questo trend, ma anche rafforzarne la validità.
irrimediabilmente verso la diversificazione operativa e il disimpegno dalle attività bancarie tradizionali.
Sebbene la politica monetaria della BCE sia il principale, non se ne possono certo ignorare altri, quali lo stato di debolezza e instabilità dell'economia europea e internazionale, gli effetti delle nuove norme bancarie di UE e Comitato di Basilea, il nuovo quadro della vigilanza unica BCE e lo stato della concorrenza attuale e potenziale nel settore dei servizi finanziari.
Tutti questi fattori possono essere considerati come forze diverse (anche se interconnesse e interdipendenti) che spingono tutte in un unico punto, questo punto è la banca, e la direzione verso cui la spingono è la diversificazione operativo/reddituale. Un altro modo di vedere la situazione è che questi stessi fattori esercitano una pressione congiunta sul margine d'interesse, comprimendo sempre di più la redditività e la sostenibilità dell'intermediazione creditizia.
Questa pressione è quindi asimmetrica: colpisce solo un ambito della vita della banca e lascia aperte altre strade per recuperare la redditività persa, quali ad esempio l’intermediazione mobiliare e assicurativa.
A ben vedere quindi la spinta verso la diversificazione è determinata dalle pressioni esercitate dell'ambiente operativo/regolamentare delle banche, insieme alla pressione che il mercato e gli investitori esercitano sulle banche, al fine che sostengano il prezzo delle azioni attraverso performance significative.
Siamo quindi probabilmente di fronte ad una situazione in cui la banca tradizionale è prossima all'estinzione, in favore del modello di banca universale mista, con al massimo la speranza di poter essere inglobata e assorbita all'interno di questa.
Se però la diversificazione presenta evidenti vantaggi in termini di riduzione delle probabilità di default della singola banca e di profittabilità, meno evidente (quasi nascosto) risulta il costo che questo comporta a livello sistemico, dato che nessun livello di diversificazione può mai impedire un evento sistemico e che, in base alle mie ricerche, è probabile che livelli complessivamente alti della stessa prestino il fianco proprio a questo tipo di eventi negativi.
A livello psicologico l'effetto gregge è molto forte nei mercati finanziari, e se tutti decidono di diversificare molto, il sistema non può risultare diversificato nel complesso: risulta solo maggiormente omogeneo e interconnesso, quindi molto esposto a eventi negativi che riguardano contemporaneamente più intermediari; e questo solo a livello meccanico, l'effetto contagio può arrivare anche dopo a colpire il sistema.
In un mondo con limitate possibilità d'investimento c'è un evidente problema di asset correlation fra i portafogli delle banche e la diversificazione operativa porta le banche a invadere gli spazi dei competitor per entrare in aree d'affari nuove; sommando questi fattori al parziale disimpegno dall'intermediazione creditizia in corso, otteniamo un'immagine di un sistema formato da banche decisamente troppo simili per essere considerato stabile.
Questo ci porta anche ad un'altra questione, nell'ambito del moral hazard: volente o nolente una banca ottiene ovvi benefici dalla garanzia di un salvataggio in caso di crisi grave e questa dipende dalle caratteristiche della banca, le quali determinano la sua rilevanza sistemica.
Si dà quindi generalmente per scontato che esista un incentivo occulto per le banche a diventare “too big to fail”, ma, come sostengono Moore e Zhou (2013), ne potrebbe esistere anche uno a diventare “too non-traditional to fail”: infatti oltre alle dimensioni della banca dovremmo considerare come determinante per la sua rilevanza sistemica anche la sua non-tradizionalità, intesa come appoggio crescente alla raccolta all’ingrosso sul lato del passivo e a fonti reddituali non-interest-related quali commissioni e simili.
Al contrario, le banche che operano in modo tradizionale, con alti livelli di Tier 1 Ratio ( e qui Basilea III cerca di favorire la raccolta al dettaglio tramite depositi) e centrate sul business dell’erogazione di prestiti hanno meno rilevanza sistemica e hanno quindi probabilità inferiori di essere oggetto di piani di salvataggio pubblici in caso di crisi. Il quadro non è molto incoraggiante: tutto il sistema finanziario spinge in una direzione ben precisa e questa non appare ottimale a livello macro-prudenziale, politiche come il
verso la deregolamentazione finanziaria e quindi maggiori spazi di manovra per le banche in cerca di profitti.
L'ottica micro-prudenziale appare il solo driver credibile per le scelte delle banche e non sembra ci siano, né ora, né nel futuro prossimo, incentivi reali tali da far si che il problema dell’impatto di queste sul livello del rischio sistemico acquisti un ruolo veramente centrale all’interno del settore.
Un'ultima nota la merita la situazione che si sta dipanando in questi mesi, infatti è notizia di poco tempo fa che la FED abbia ridotto i tassi di riferimento.
I tassi però sono rimasti bassi anche durante l'ultima fase di espansione dell'economia americana su pressioni della Casa Bianca, quindi i livelli pre-crisi subprime non sono mai stati ristabiliti e il costo del denaro è rimasto relativamente basso in questo periodo. La FED quindi sta usando il suo margine di manovra a disposizione per sostenere l'economia e la liquidità americana nel caos da Covid-19, ma questo spazio è in partenza molto striminzito se non viene presa in considerazione l'ipotesi di operare a tassi negativi sul mercato.
Questo semplice fatto, dovuto a uno shock esogeno dell'economia mondiale, ha riportato in auge il discorso contestuale sull'esercizio da parte delle banche private di tassi negativi sui depositi alla clientela e secondo alcuni, l’imminente introduzione di una moneta elettronica da parte della BCE ha proprio l’obbiettivo di poter imporre tassi negativi sui depositi più facilmente.
Se confrontiamo però la FED con la BCE è chiaro che la politica monetaria europea ha gìà eroso qualsiasi margine di politica monetaria coi tassi negativi e il QE, dando quindi per scontata una recessione connessa agli effetti del virus sull'economia, quale può essere la risposta della BCE?
Alzare i tassi è impossibile e sospendere il QE pure, ma insistere su queste strade che si sono rivelate inadeguate a sostenere la crescita può essere efficace per sconfiggere una recessione?
Un ribasso ulteriore dei tassi presenta dei problemi, dei quali ho già parlato, e non è detto che il sistema sia in grado di resistere a uno shock meglio che in passato.
Giunti a questo punto, il celebre Helicopter Money di Friedman, con la banca centrale che fornisce liquidità direttamente ai cittadini “gettando denaro da un elicottero”, appare sempre meno come una provocazione e più come una reale possibilità di intervento per le banche centrali.
Appendice
Di seguito viene riportato, in forma completa, il foglio di calcolo del lavoro di regressione di cui al capitolo 3 della tesi.
Sat 7 Nov 2020 16:59:17 CET
In [1]: import sys In [ ]:
In [2]: import numpy as np
import matplotlib import matplotlib.pyplot as plt import pandas as pd import seaborn as sns import plotly import plotly.express as px import scipy
from scipy import stats
from scipy.stats import kurtosis, skew
import statsmodels.api as sm
import IPython
from IPython.core.display import HTML
import sklearn
from sklearn import linear_model
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score, mean_absolute_error
import xlrd
sns.set_theme(style="darkgrid") %matplotlib inline
#plt.rcParams['figure.figsize'] = [13, 7]
Printing version of imported modules for future reproducibility
In [3]: # Python version:
print("Python version: {}".format(sys.version))
In [4]: # modules version
version = lambda x: print("{}=={}".format(x.__name__, x.__version__)) version(np) version(matplotlib) version(pd) version(sns) version(scipy) version(sm) version(IPython) version(sklearn) version(xlrd) version(plotly)
Python version: 3.8.1 (v3.8.1:1b293b6006, Dec 18 2019, 14:08:53) [Clang 6.0 (clang-600.0.57)] numpy==1.19.2 matplotlib==3.3.2 pandas==1.0.1 seaborn==0.11.0 scipy==1.4.1 statsmodels.api==0.11.1
In [ ]:
In [5]: pd.options.display.max_rows = 300 pd.options.display.max_columns = 50
In [6]: # setting "global" variable MY_RANGE which stores the years I'm going to examine. YEARS_RANGE = range(2011, 2020)[::-1]
list(YEARS_RANGE)
In [7]: # df contains dataframe of [orbis](https://www.bvdinfo.com/en-gb/our-products/data/international/orbis) data. df = pd.read_excel("mansarda2020.xlsx", sheet_name=1)
In [8]: df.info() df
In [ ]: In [ ]:
In [9]: #remove new lines from titles
df.columns = df.columns.str.replace('\n', ' ') Out[6]: [2019, 2018, 2017, 2016, 2015, 2014, 2013, 2012, 2011]
<class 'pandas.core.frame.DataFrame'> RangeIndex: 3045 entries, 0 to 3044
Columns: 162 entries, Unnamed: 0 to Net Interest Margin (%) 2011.1
dtypes: float64(1), object(161) memory usage: 3.8+ MB Out[8]: Unnamed: 0 Company name Latin alphabet Interest Income\nm EUR 2020 Interest Income\nm EUR 2019 Interest Income\nm EUR 2018 Interest Income\nm EUR 2017 Interest Income\nm EUR 2016 Interest Income\nm EUR 2015 Interest Income\nm EUR 2014 Interest Income\nm EUR 2013 Interest Income\nm EUR 2012 In 0 1.0 SANTANDERBANCO SA n.a. 56785 54325 56041 55156 57198 54656 51447 59024 1 2.0 BNP PARIBASSA n.a. 37327 35723 33566 40894 41381 38707 36967 44476 2 3.0 CREDITSRECORD
SA/NV n.a. n.a. n.a. 466.151 514.528 594.848 n.a. 620.577 624.1
3 4.0 AGRICOLECREDIT n.a. 33509 33110 33411 34373 36240 37037 38922 43350
4 5.0 BANCO BILBAO VIZCAYA ARGENTARIA SA n.a. 31061 29830 29296 27708 24783 22838 23512 26262 ... ... ... ... ... ... ... ... ... ... ... ... 3040 3041.0 SETTLEMENT BANK OF THE NETHERLANDS NV
n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a.
3041 3042.0 IKB FINANCEBV n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a.
3042 3043.0 OOSTHAVENB.V. n.a. n.a. n.a. n.a. 0.77 0.66 1.202 n.a. n.a.
3043 3044.0
CAIXA ECONOMICA MONTEPIO GERAL
n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a.
3044 3045.0 FINANTIA SABANCO n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a. n.a.
In [10]: # dropping useless/uninformative columns:
for col in df.columns:
# .1 because Net interested margin (%) is a duplicate if "Unnamed: 0" in col or \
"Company name Latin alphabet" in col or \ "Total revenue m EUR" in col or \
".1" in col or \ "2020" in col:
df = df.drop(col, axis=1)
def cast_to_float(col: pd.core.series.Series) -> pd.core.series.Series: return pd.to_numeric(col, errors='coerce')
# print("Columns:\n\t{}".format("\n\t".join([col for col in df.columns])))
for col in [col for col in df.columns]: df[col] = cast_to_float(df[col]) # df.info()
del col
In [11]: # drop rows containing only NaNs. df.dropna(how='all', inplace=True) In [ ]:
In [12]: df
Adding new variable to the dataframe:
Derivatives (assets) / Total assets (%)
In [13]: for i in YEARS_RANGE:
df["Derivatives (assets) / Total assets (%) {}".format(i)] = \
( df["Derivatives (assets) m EUR {}".format(i)] / df["Total assets m EUR {}".format(i)] ) * 100 Out[12]: Interest Income m EUR 2019 Interest Income m EUR 2018 Interest Income m EUR 2017 Interest Income m EUR 2016 Interest Income m EUR 2015 Interest Income m EUR 2014 Interest Income m EUR 2013 Interest Income m EUR 2012 Interest Income m EUR 2011 Other Operating Income m EUR 2019 Other Operating Income m EUR 2018 Other Operating Income m EUR 2017 Other Operating Income m EUR 2016 Ope Inco EUR 0 56785.0 54325.0 56041.000 55156.000 57198.000 54656.000 51447.000 59024.0 60856.000 16084.000 16083.00 16025.000 15103.000 1531 1 37327.0 35723.0 33566.000 40894.000 41381.000 38707.000 36967.000 44476.0 47124.000 24056.000 22082.00 22951.000 21447.000 2099
2 NaN NaN 466.151 514.528 594.848 NaN 620.577 624.1 599.348 38383.043 20870.66 3.618 69.203
3 33509.0 33110.0 33411.000 34373.000 36240.000 37037.000 38922.000 43350.0 45024.000 15677.000 14590.00 13265.000 12087.000 1267
4 31061.0 29830.0 29296.000 27708.000 24783.000 22838.000 23512.000 26262.0 24188.000 8347.000 8258.00 9736.000 9721.000 962
... ... ... ... ... ... ... ... ... ... ... ... ... ...
3038 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3039 NaN NaN NaN NaN 0.017 0.012 0.002 NaN NaN NaN NaN NaN NaN 1
3040 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3041 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3042 NaN NaN NaN 0.770 0.660 1.202 NaN NaN NaN NaN NaN NaN 16.384 1
In [14]: # putting fields in a single list called `fields` fields = []
for col_name in df.columns:
col_name_without_year = col_name[:-5] if col_name_without_year not in fields: fields.append(col_name_without_year)
print("fields original:\n\n\t{}".format("\n\t".join([col for col in fields])))
del col_name, col_name_without_year
Creating list fields to store variables I want to study:
In [15]: fields = [
"Net Loans / Total assets (%)",
"Derivatives (assets) / Total assets (%)", "Net Interest Margin (%)",
"Non Perf. Loans / Gross Loans (%)", "Interbank Ratio (%)",
]
print("fields:\n\n\t{}".format("\n\t".join([col for col in fields])))
# non-nulls per col
fields original:
Interest Income m EUR Other Operating Income m EUR Remaining operating income m EUR Net Income m EUR
Net Interest Revenue m EUR Total assets m EUR
Derivatives (assets) m EUR
Net gains (losses) on trading and derivatives m EUR Profit margin (%)
Net Loans / Total assets (%) Interbank Ratio (%)
Net Interest Margin (%)
Return on Avg Assets (ROAA) (%) Non Perf. Loans / Gross Loans (%) Derivatives (assets) / Total assets (%)
fields:
Net Loans / Total assets (%)
Derivatives (assets) / Total assets (%) Net Interest Margin (%)
Non Perf. Loans / Gross Loans (%) Interbank Ratio (%)
In [16]: columns = {}
print("Field name" + " "*67 + "# non-null") print("-"*87)
for i in df.columns:
columns[i] = df[i].count()
print("{:<60} {:>20}".format(i, df[i].count()))
Field name # non-null --- Interest Income m EUR 2019 2119 Interest Income m EUR 2018 2842 Interest Income m EUR 2017 2839 Interest Income m EUR 2016 2824 Interest Income m EUR 2015 2657 Interest Income m EUR 2014 2523 Interest Income m EUR 2013 2446 Interest Income m EUR 2012 1503 Interest Income m EUR 2011 1280 Other Operating Income m EUR 2019 2145 Other Operating Income m EUR 2018 2892 Other Operating Income m EUR 2017 2895 Other Operating Income m EUR 2016 2883 Other Operating Income m EUR 2015 2715 Other Operating Income m EUR 2014 2567 Other Operating Income m EUR 2013 2487 Other Operating Income m EUR 2012 1514 Other Operating Income m EUR 2011 1287 Remaining operating income m EUR 2019 2119 Remaining operating income m EUR 2018 2862 Remaining operating income m EUR 2017 2859 Remaining operating income m EUR 2016 2844 Remaining operating income m EUR 2015 2679 Remaining operating income m EUR 2014 2531 Remaining operating income m EUR 2013 2454 Remaining operating income m EUR 2012 1496 Remaining operating income m EUR 2011 1271 Net Income m EUR 2019 2158 Net Income m EUR 2018 2906 Net Income m EUR 2017 2911 Net Income m EUR 2016 2894 Net Income m EUR 2015 2727 Net Income m EUR 2014 2576 Net Income m EUR 2013 2495 Net Income m EUR 2012 1514 Net Income m EUR 2011 1288 Net Interest Revenue m EUR 2019 2133 Net Interest Revenue m EUR 2018 2864 Net Interest Revenue m EUR 2017 2861 Net Interest Revenue m EUR 2016 2849 Net Interest Revenue m EUR 2015 2679 Net Interest Revenue m EUR 2014 2534 Net Interest Revenue m EUR 2013 2454 Net Interest Revenue m EUR 2012 1504 Net Interest Revenue m EUR 2011 1281 Total assets m EUR 2019 2164 Total assets m EUR 2018 2924 Total assets m EUR 2017 2931 Total assets m EUR 2016 2910 Total assets m EUR 2015 2741 Total assets m EUR 2014 2591 Total assets m EUR 2013 2506 Total assets m EUR 2012 1520 Total assets m EUR 2011 1292 Derivatives (assets) m EUR 2019 934 Derivatives (assets) m EUR 2018 1008 Derivatives (assets) m EUR 2017 983 Derivatives (assets) m EUR 2016 962 Derivatives (assets) m EUR 2015 856 Derivatives (assets) m EUR 2014 818 Derivatives (assets) m EUR 2013 785 Derivatives (assets) m EUR 2012 625 Derivatives (assets) m EUR 2011 576 Net gains (losses) on trading and derivatives m EUR 2019 1304 Net gains (losses) on trading and derivatives m EUR 2018 1546 Net gains (losses) on trading and derivatives m EUR 2017 1536 Net gains (losses) on trading and derivatives m EUR 2016 1214 Net gains (losses) on trading and derivatives m EUR 2015 1116 Net gains (losses) on trading and derivatives m EUR 2014 1065 Net gains (losses) on trading and derivatives m EUR 2013 1025 Net gains (losses) on trading and derivatives m EUR 2012 797 Net gains (losses) on trading and derivatives m EUR 2011 708 Profit margin (%) 2019 2118 Profit margin (%) 2018 2838 Profit margin (%) 2017 2832 Profit margin (%) 2016 2810
In [17]: # non nulls sorted
columns_sorted_by_non_nulls = {k: [v] for k, v in sorted(columns.items(), key=lambda item: item[1])} pd.DataFrame.from_dict(columns_sorted_by_non_nulls)