2016-05-11 77 views
-2

我正在處理包含由錯誤計數組成的列的數據幀。我遇到的問題是在64k後計數器翻轉。此外,長時間運行時會發生多次翻車。我需要一種方法來糾正這些溢出並獲得準確的計數。處理數據幀中的值翻轉

回答

0

我不知道它總是正常工作,但讓我們試試:

# groups 
g = df.groupby((df['count'].diff() < 0).cumsum()) 

# mapping cumulative summand 
mp = df.groupby((df['count'].diff() < 0).cumsum(), as_index=False).max().shift(1).fillna(0)['count'] 

# math 
for grp, chunk in g: 
    df['count'] += (df['count'].diff() < 0).cumsum().map(mp) 

原DF:

In [416]: df 
Out[416]: 
    count 
0  0 
1  1 
2  2 
3  3 
4  4 
5  5 
6  0 
7  1 
8  2 
9  3 
10  4 
11  0 
12  1 
13  2 
14  3 
15  4 
16  5 
17  6 
18  7 
19  8 

結果:

In [414]: df 
Out[414]: 
    count 
0  0.0 
1  1.0 
2  2.0 
3  3.0 
4  4.0 
5  5.0 
6  5.0 
7  6.0 
8  7.0 
9  8.0 
10 9.0 
11 9.0 
12 10.0 
13 11.0 
14 12.0 
15 13.0 
16 14.0 
17 15.0 
18 16.0 
19 17.0 

說明:

分組助手(單調遞增基團):

In [418]: (df['count'].diff() < 0).cumsum() 
Out[418]: 
0  0 
1  0 
2  0 
3  0 
4  0 
5  0 
6  1 
7  1 
8  1 
9  1 
10 1 
11 2 
12 2 
13 2 
14 2 
15 2 
16 2 
17 2 
18 2 
19 2 
Name: count, dtype: int32 

和項爲每個組:

In [420]: df.groupby((df['count'].diff() < 0).cumsum(), as_index=False).max().shift(1).fillna(0)['count'] 
Out[420]: 
0 0.0 
1 5.0 
2 4.0 
Name: count, dtype: float64 

已經映射被加數 - 它們將被添加N次(其中N是基團的數目 - 此示例3):

In [421]: (df['count'].diff() < 0).cumsum().map(mp) 
Out[421]: 
0  0.0 
1  0.0 
2  0.0 
3  0.0 
4  0.0 
5  0.0 
6  5.0 
7  5.0 
8  5.0 
9  5.0 
10 5.0 
11 4.0 
12 4.0 
13 4.0 
14 4.0 
15 4.0 
16 4.0 
17 4.0 
18 4.0 
19 4.0 
Name: count, dtype: float64 

設置測試DF:

df = pd.DataFrame({'count': np.arange(20)}) 
df.ix[6:10, 'count'] = range(5) 
df.ix[11:19, 'count'] = range(9)