web-dev-qa-db-fra.com

Ajouter une colonne qui résulte de la différence entre les rangées consécutives des pandas

Disons que j'ai un dataframe comme celui-ci

    A   B
0   a   b
1   c   d
2   e   f 
3   g   h

0,1,2,3 sont des moments, a, c, e, g est une série temporelle et b, d, f, h est une autre série temporelle . qui est obtenu en calculant les différences de lignes consécutives pour certaines colonnes. 

Donc j'ai besoin de quelque chose comme ça

    A   B   dA
0   a   b  (a-c)
1   c   d  (c-e)
2   e   f  (e-g)
3   g   h   Nan

J'ai vu quelque chose appelé diff sur le dataframe/series mais cela le fait légèrement différemment car dans le premier élément deviendra Nan.

48
AMM

Utilisez shift .

df['dA'] = df['A'] - df['A'].shift(-1)
83
exp1orer

Vous pouvez utiliser diff et transmettre -1 comme argument periods:

>>> df = pd.DataFrame({"A": [9, 4, 2, 1], "B": [12, 7, 5, 4]})
>>> df["dA"] = df["A"].diff(-1)
>>> df
   A   B  dA
0  9  12   5
1  4   7   2
2  2   5   1
3  1   4 NaN

[4 rows x 3 columns]
34
DSM

Lorsque vous utilisez des données au format CSV, cela fonctionnerait parfaitement:

my_data = pd.read_csv('sale_data.csv')
df = pd.DataFrame(my_data)
df['New_column'] = df['target_column'].diff(1)
print(df) #for the console but not necessary 
0
Seth Okeyo

Les différences glissantes peuvent également être calculées de cette façon:

df=pd.DataFrame(my_data)
my_data = pd.read_csv('sales_data.csv')
i=0
j=1
while j < len(df['Target_column']):
    j=df['Target_column'][i+1] - df['Target_column'][i] #the difference btwn two values in a column.
    i+=1 #move to the next value in the column.
    j+=1 #next value in the new column.
    print(j)
0
Seth Okeyo