Create New Column That Compares Across Rows In Pandas Dataframe
I am looking to create a new column in a dataframe based on the values seen in the next 2 rows. Specifically, if any values in the next 2 rows are below 4, then I want the new val
Solution 1:
You can set the new
value to one and then use loc
together with shift
and lt
(less than) to set the appropriate values to zero.
df = pd.DataFrame({"A": [5, 6, 7, 8, 2]})
df['new'] = 1
df.loc[(df.A.shift(-1).lt(4)) | (df.A.shift(-2).lt(4)), 'new'] = 0
# The last value does not have any future observations and should be set to zero.
df.new.iat[-1] = 0
>>> df
A new
0 5 1
1 6 1
2 7 0
3 8 0
4 2 0
To expand to the next 8 rows instead of 2:
nrows = 8
df.loc[eval(" | ".join("df.A.shift(-{0}).lt(4)".format(n)
for n in range(1, nrows + 1))), 'new'] = 0
Post a Comment for "Create New Column That Compares Across Rows In Pandas Dataframe"