Python Forum
DataFrame Calculation - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: Data Science (https://python-forum.io/forum-44.html)
+--- Thread: DataFrame Calculation (/thread-4489.html)



DataFrame Calculation - ian - Aug-21-2017

It is easy to add a new column to store the results of calculation on the same row as below.
I need to add a column df["d"] that will contain the results of calculation with current row i and next row i+1
something like: df["d"][i] = (df["b"][i] - df["a"][i+1]) / df["a"][i+ 1]
I can use "for loop" to do that but wondering if another better way. thanks

import pandas as pd

df = pd.DataFrame({"a": [11,12,13,14,15,16],
                   "b": [15,20,30,20,30,50]})
df["c"] = (df["b"] - df["a"]) / df["a"]
print(df)



RE: DataFrame Calculation - SamSoftwareLtd - Nov-21-2018

Hi Ian,

How about the simple assignment line below:
df['e']=[9,8,7,6,5,4]
df
Out[67]:
a b e
0 11 15 9
1 12 20 8
2 13 30 7
3 14 20 6
4 15 30 5
5 16 50 4

your case above seems similar to what I'm doing and posted about earlier titled "DataFrame simple calculation" which I still have no answer/solution for, same calculation in the data frame (which is calculating the returns against each row/trade day.

In my case I am trying to assign the result to a new dataframe called [ret], but the results I get seem to always zero, see below applied your dataframe sample above:
df = pd.DataFrame({"a": [11,12,13,14,15,16],
                   "b": [15,20,30,20,30,50]})

ret=(df.a[1:]-df.a[:-1])/df.a[:-1]

ret
Out[63]:
0 NaN
1 0.0
2 0.0
3 0.0
4 0.0
5 NaN
Name: a, dtype: float64


RE: DataFrame Calculation - SamSoftwareLtd - Nov-22-2018

So just to get to your sample, you can use the below line without a loop should suffice:
df["c"] = (df["b"] - df["a"]) / df["a"]
You can also assign the result to a new dataframe:
newDF = (df["b"] - df["a"]) / df["a"]