2016-06-17 10 views
1

glaubte, ich hatte:Pandas Serie bfill erste Hälfte, ffill zweite Hälfte

import pandas as pd 
import numpy as np 

np.random.seed([3,1415]) 
s = pd.Series(np.random.choice((0, 1, 2, 3, 4, np.nan), 
           (50,), p=(.1, .1, .1, .1, .1, .5))) 

ich in fehlenden Werten für die erste Hälfte der Serie füllen sichern will und nach vorn für die zweite Hälfte der Serie zu füllen. Middle-out, wenn du willst.

Erwartete Ausgabe

0  4.0 
1  4.0 
2  4.0 
3  4.0 
4  4.0 
5  0.0 
6  1.0 
7  1.0 
8  1.0 
9  1.0 
10 1.0 
11 1.0 
12 1.0 
13 1.0 
14 1.0 
15 1.0 
16 1.0 
17 1.0 
18 4.0 
19 1.0 
20 2.0 
21 0.0 
22 0.0 
23 NaN 
24 NaN 
25 NaN 
26 NaN 
27 3.0 
28 2.0 
29 4.0 
30 4.0 
31 4.0 
32 4.0 
33 0.0 
34 0.0 
35 0.0 
36 0.0 
37 2.0 
38 2.0 
39 2.0 
40 2.0 
41 1.0 
42 1.0 
43 0.0 
44 2.0 
45 2.0 
46 2.0 
47 2.0 
48 2.0 
49 2.0 
dtype: float64 

Antwort

1

ich unabhängig hier auf den beiden Hälften arbeiten gerade:

In [71]: s.ix[:len(s)/2].bfill().append(s.ix[1+len(s)/2:].ffill()) 
Out[71]: 
0  4 
1  4 
2  4 
3  4 
4  4 
5  0 
6  1 
7  1 
8  1 
9  1 
10  1 
11  1 
12  1 
13  1 
14  1 
15  1 
16  1 
17  1 
18  4 
19  1 
20  2 
21  0 
22  0 
23 NaN 
24 NaN 
25 NaN 
26 NaN 
27  3 
28  2 
29  4 
30  4 
31  4 
32  4 
33  0 
34  0 
35  0 
36  0 
37  2 
38  2 
39  2 
40  2 
41  1 
42  1 
43  0 
44  2 
45  2 
46  2 
47  2 
48  2 
49  2 
dtype: float64 
Verwandte Themen