-2
我正在處理包含由錯誤計數組成的列的數據幀。我遇到的問題是在64k後計數器翻轉。此外,長時間運行時會發生多次翻車。我需要一種方法來糾正這些溢出並獲得準確的計數。處理數據幀中的值翻轉
我正在處理包含由錯誤計數組成的列的數據幀。我遇到的問題是在64k後計數器翻轉。此外,長時間運行時會發生多次翻車。我需要一種方法來糾正這些溢出並獲得準確的計數。處理數據幀中的值翻轉
我不知道它總是正常工作,但讓我們試試:
# 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)