python - Create a new Column of previous N rows as an Array -


i have dataframe df looks this,

         b  0  30.05  29.55 1  30.20  26.05 2  30.81  25.65 3  31.12  26.44 .. ...    ... 85 30.84  25.65 86 31.12  26.44 87 29.55  25.57 88 32.41  25.45 89 21.55  29.57 90 32.91  26.41 91 34.12  25.69 

i need create new column 'c' holds array of column 'b' value plus previous 4 rows values of column 'b'. resulting df like,

          b     c 0  30.05  29.55 [29.55,0,0,0,0] 1  30.20  26.05 [26.05,29.55,0,0,0] 2  30.81  25.65 [25.65,26.05,29.55,0,0] 3  31.12  26.44 [26.44,25.65,26.05,29.55,0] .. ...    ... 85 30.84  25.65 [25.65, 44.60, 30.15, 29.55, 24.66 ] 86 31.12  26.44 [26.44, 25.65, 25.65, 25.65, 25.65 ] 87 29.55  25.57 [25.57, 26.44, 25.65, 25.65, 25.65 ] 88 32.41  25.45 [25.45, 25.57, 26.44, 25.65, 25.65 ] 89 21.55  29.57 [29.57, 25.45, 25.57, 26.44, 25.65 ] 90 32.91  26.41 [26.41, 29.57, 25.45, 25.57, 26.44 ] 91 34.12  25.69 [25.69, 26.41, 29.57, 25.45, 25.57 ] 

i know can access previous rows df.b.shift(1) , df.b.shift(2) etc want able change how many rows form array variable rather type out many shift(n)

after looking day i'm stuck. (python3.6)

you use pd.concat range(n)

in [60]: df['c'] = pd.concat([df.b.shift(i) in range(4)], 1).fillna(0).values.tolist()  in [61]: df out[61]:              b                             c 0   30.05  29.55        [29.55, 0.0, 0.0, 0.0] 1   30.20  26.05      [26.05, 29.55, 0.0, 0.0] 2   30.81  25.65    [25.65, 26.05, 29.55, 0.0] 3   31.12  26.44  [26.44, 25.65, 26.05, 29.55] 85  30.84  25.65  [25.65, 26.44, 25.65, 26.05] 86  31.12  26.44  [26.44, 25.65, 26.44, 25.65] 87  29.55  25.57  [25.57, 26.44, 25.65, 26.44] 88  32.41  25.45  [25.45, 25.57, 26.44, 25.65] 89  21.55  29.57  [29.57, 25.45, 25.57, 26.44] 90  32.91  26.41  [26.41, 29.57, 25.45, 25.57] 91  34.12  25.69  [25.69, 26.41, 29.57, 25.45] 

or, use np.column_stack on shift(n)

in [70]: np.column_stack([df.b.shift(i).fillna(0) in range(4)]).tolist() out[70]: [[29.55, 0.0, 0.0, 0.0],  [26.05, 29.55, 0.0, 0.0],  [25.65, 26.05, 29.55, 0.0],  [26.44, 25.65, 26.05, 29.55],  [25.65, 26.44, 25.65, 26.05],  [26.44, 25.65, 26.44, 25.65],  [25.57, 26.44, 25.65, 26.44],  [25.45, 25.57, 26.44, 25.65],  [29.57, 25.45, 25.57, 26.44],  [26.41, 29.57, 25.45, 25.57],  [25.69, 26.41, 29.57, 25.45]] 

Comments

Popular posts from this blog

android - InAppBilling registering BroadcastReceiver in AndroidManifest -

python Tkinter Capturing keyboard events save as one single string -

sql server - Why does Linq-to-SQL add unnecessary COUNT()? -