Comment décaler de une ou plusieurs lignes les valeurs d'une colonne d'une dataframe avec pandas en python ?

Published: 04 octobre 2021

Tags: Python; Pandas; DataFrame;

DMCA.com Protection Status

Exemples de comment décaler de une ou plusieurs lignes les valeurs d'une colonne d'une dataframe avec pandas en python:

Créer une dataframe avec pandas

Créons d'abord une dataframe avec pandas :

import pandas as pd 
import numpy as np

data = np.arange(1,31)
data = data.reshape(10,3)

df = pd.DataFrame(data=data,columns=['a','b','c'])

print(df)

donne alors

    a   b   c
0   1   2   3
1   4   5   6
2   7   8   9
3  10  11  12
4  13  14  15
5  16  17  18
6  19  20  21
7  22  23  24
8  25  26  27
9  28  29  30

Décaler de une ou plusieurs lignes les valeurs d'une colonne donnée

Décaler les lignes vers le bas ou vers le haut

Pour décaler par exemple de 3 lignes vers le bas pour la colonne c, une solution est d'utiliser pandas.DataFrame.shift.

Note: le paramètre "periods" défini le nombre de lignes à décaler:

df = df['c'].shift(periods=3)

print(df)

donne

0     NaN
1     NaN
2     NaN
3     3.0
4     6.0
5     9.0
6    12.0
7    15.0
8    18.0
9    21.0
Name: c, dtype: float64

Décaler de 3 lignes vers le haut pour la colonne c

df = pd.DataFrame(data=data,columns=['a','b','c'])

df = df['c'].shift(periods=-3)

print(df)

donne

0    12.0
1    15.0
2    18.0
3    21.0
4    24.0
5    27.0
6    30.0
7     NaN
8     NaN
9     NaN
Name: c, dtype: float64

Autre exemple de décalage d'une seule ligne :

df = pd.DataFrame(data=data,columns=['a','b','c'])

df = df['c'].shift(periods=1)

print(df)

donne

0     NaN
1     3.0
2     6.0
3     9.0
4    12.0
5    15.0
6    18.0
7    21.0
8    24.0
9    27.0
Name: c, dtype: float64

Definir fill_value

Par défaut fill_value est NaN mais il est possible de définir une autre valeur en utilisant le paramètre fill_value :

df = pd.DataFrame(data=data,columns=['a','b','c'])

df = df['c'].shift(periods=3, fill_value=-99999)

print(df)

donne

0   -99999
1   -99999
2   -99999
3        3
4        6
5        9
6       12
7       15
8       18
9       21
Name: c, dtype: int64

Créer de nouvelles colonnes avec les valeurs des voisins les plus proches

Un autre exemple créons de nouvelles colonnes avec les valeurs des voisins les plus proches

df = pd.DataFrame(data=data,columns=['a','b','c'])

df["n+1"] = df['c'].shift(periods=1, fill_value=-99999)
df["n+2"] = df['c'].shift(periods=2, fill_value=-99999)
df["n-1"] = df['c'].shift(periods=-1, fill_value=-99999)
df["n-2"] = df['c'].shift(periods=-2, fill_value=-99999)

print(df)

donne

    a   b   c    n+1    n+2    n-1    n-2
0   1   2   3 -99999 -99999      6      9
1   4   5   6      3 -99999      9     12
2   7   8   9      6      3     12     15
3  10  11  12      9      6     15     18
4  13  14  15     12      9     18     21
5  16  17  18     15     12     21     24
6  19  20  21     18     15     24     27
7  22  23  24     21     18     27     30
8  25  26  27     24     21     30 -99999
9  28  29  30     27     24 -99999 -99999

Références