2 votes

Prenez la dérivée du dataframe

Je veux dériver une dataframe ligne par ligne. C'est simplement la différence: df_derived(i,j) = df(i,j)- df(i,j-1). Dataframe donnée ci-dessous:

    GRD1    GRD2    GRD3    GRD4    GRD5    GRD6    GRD7
0   1       6       5.0     9.0     1.0     7.0     9
1   5       8       NaN     8.0     NaN     NaN     2
2   7       8       NaN     NaN     NaN     2.0     6

Je cherche:

    GRD1    GRD2    GRD3    GRD4    GRD5    GRD6    GRD7
0   NaN     5.0     -1      4.0     -8.0    6.0     2.0
1   NaN     3.0     NaN     NaN     NaN     NaN     NaN
2   NaN     1.0     NaN     NaN     NaN     NaN     4.0

Mais quand je fais: df.apply('diff',axis=1), le résultat est différent:

    GRD1    GRD2    GRD3    GRD4    GRD5    GRD6    GRD7
0   NaN     5.0     NaN     4.0     -8.0    6.0     3.0
1   NaN     3.0     NaN     NaN     NaN     NaN     -6.0
2   NaN     1.0     NaN     NaN     NaN     NaN     -2.0

Remarquez que les colonnes GR3 et GRD7 sont différentes. Comment faire cela?

3voto

W-B Points 94428

Essayons numpy diff

df[:]=np.hstack([np.ones((len(df),1))*np.nan,np.diff(df.values)])
df
   GRD1  GRD2  GRD3  GRD4  GRD5  GRD6  GRD7
0   NaN   5.0  -1.0   4.0  -8.0   6.0   2.0
1   NaN   3.0   NaN   NaN   NaN   NaN   NaN
2   NaN   1.0   NaN   NaN   NaN   NaN   4.0

2voto

Andy L. Points 11730

Essayez de convertir toutes les colonnes en float

df_final = df.astype(float).diff(axis=1)

Out[65]:
   GRD1  GRD2  GRD3  GRD4  GRD5  GRD6  GRD7
0   NaN   5.0  -1.0   4.0  -8.0   6.0   2.0
1   NaN   3.0   NaN   NaN   NaN   NaN   NaN
2   NaN   1.0   NaN   NaN   NaN   NaN   4.0

0 votes

Waouh (Facepalm). Merci.

1 votes

@Kaisar: Bienvenue. Tu n'es pas seul. Cela m'a impacté par le passé. C'est pourquoi je connais la solution si rapidement :D

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X