Adding a column thats result of difference in consecutive rows in pandas

PandasDataframeSeries

Pandas Problem Overview


Lets say I have a dataframe like this

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

0,1,2,3 are times, a, c, e, g is one time series and b, d, f, h is another time series. I need to be able to add two columns to the orignal dataframe which is got by computing the differences of consecutive rows for certain columns.

So i need something like this

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

I saw something called diff on the dataframe/series but that does it slightly differently as in first element will become Nan.

Pandas Solutions


Solution 1 - Pandas

Use shift.

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

Solution 2 - Pandas

You could use diff and pass -1 as the periods argument:

>>> 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]

Solution 3 - Pandas

When using data in CSV, this would work perfectly:

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 

Solution 4 - Pandas

Rolling differences can also be calculated this way:

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)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAMMView Question on Stackoverflow
Solution 1 - Pandasexp1orerView Answer on Stackoverflow
Solution 2 - PandasDSMView Answer on Stackoverflow
Solution 3 - PandasSeth OkeyoView Answer on Stackoverflow
Solution 4 - PandasSeth OkeyoView Answer on Stackoverflow