Avic
Avic

Reputation: 469

Pandas - How to make new column with condition

i have this table

   Day, Average

    1,     1200,             
    3,     1300,           
    4,     1400,            
    5,     1500,         

what i want :

  Day, Average, Tomorrow_average

    1,     1200,    NaN         
    3,     1300,    1400      
    4,     1400,    1500      
    5,     1500,    NaN

Explanation:

Tomorrow Average is Average on the next day

when Day = 1 , Tomorrow Average = NaN , because Day 2 is empty

When Day =3 , Tomorrow Average = 1400, because Average on Day 4 is 1400

How to do that?

df["Tomorrow Average"] = [] # ????????

Upvotes: 1

Views: 37

Answers (1)

Vaishali
Vaishali

Reputation: 38425

A very length solution using reindex,

df['Tomorrow_average'] = df.set_index('Day').reindex(np.arange(df.Day.min(), df.Day.max()+1)).Average.shift(-1).reindex(df.Day).reset_index(drop = True)

   Day  Average Tomorrow_average
0   1   1200    NaN
1   3   1300    1400.0
2   4   1400    1500.0
3   5   1500    NaN

Easier one with same output:

cond = (df['Day'] + 1) == df['Day'].shift(-1)
df['Tomorrow_average'] = np.where(cond, df['Average'].shift(-1), np.nan)

Upvotes: 2

Related Questions