Reputation: 1052
I want to take the derivative of a dataframe row-wise. This is simply the difference: df_derived(i,j) = df(i,j)- df(i,j-1)
. Dataframe given below:
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
I am looking for:
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
But when I do: df.apply('diff',axis=1)
, result is different:
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
Notice column GR3 and GRD7 are different. How to do this?
Upvotes: 2
Views: 387
Reputation: 323356
Let us try 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
Upvotes: 3
Reputation: 25269
Try cast all columns to 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
Upvotes: 2