Reconciliation de données via la methode SwapLevel

SwapLevel

Afin d’illustrer l’utilisation du swaplevel, on va imaginer 2 dataframes (firstReport & secondReport) dont il faut comparer les colonnes.


secondReport = pd.DataFrame([
[1, 5, 'Eric'],
[1, 10, 'Eric'],
[1, 30, 'Marc'],
[1, 5, 'Bob'],
[2, 40, 'Eric'],
[2, 15, 'Bob']], columns = ['IncidentNumber','TimeSpent','User'])

La première étape consiste à concaténer les DataFrames horizontalement avec la fonction de concaténation et à distinguer chaque trame avec le paramètre keys


df_all = pd.concat([firstReport.set_index('IncidentNumber'), 
secondReport.set_index('IncidentNumber'),
axis='columns', keys=['First', 'Second'])

Il est probablement plus facile d’échanger les niveaux des colonnes et de mettre les mêmes noms de colonnes les uns à côté des autres:


df_final = df_all.swaplevel(axis='columns')[firstReport.columns[1:]]

Sortie

Methode Apply

Allons un peu plus loin dans la reconciliation entre les deux rapports, afin de mettre en valeur la plus grande période passé sur un incident.

On écrit dabords une méthode adapté…


def highlightGreaterTimeSpent(data,column):
    redColor = 'color: {}'.format('red')
    #other is the other dataframe to compare with
    other = data.xs(column, axis='columns', level=-1)
    return pd.DataFrame(np.where(data.gt(other, level=0), redColor, ''),
                        index=data.index, columns=data.columns)

… qu’on applique à notre df_final

df_final = df_final.reset_index(drop=True).style \
.apply(highlightGreaterTimeSpent,column='First', axis=None) \
.apply(highlightGreaterTimeSpent,column='Second',axis=None)

Notons le caractère de continuation de ligne \

La nécessité de ce style devient plus évidente à mesure que les noms de méthode s’allongent et que les méthodes commencent à prendre des arguments.

 Sortie

Leave a Reply

Your email address will not be published. Required fields are marked *