Python 处理数据帧中的值翻转

Python 处理数据帧中的值翻转,python,pandas,Python,Pandas,我正在处理一个数据帧,其中包含一个由错误计数组成的列。我遇到的问题是计数器在64k后翻转。此外,在长时间运行时,滚动会发生多次。我需要一种方法来纠正这些溢出并获得准确的计数。我不确定它是否总是正常工作,但让我们试试: # groups g = df.groupby((df['count'].diff() < 0).cumsum()) # mapping cumulative summand mp = df.groupby((df['count'].diff() < 0).cumsu

我正在处理一个数据帧,其中包含一个由错误计数组成的列。我遇到的问题是计数器在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) 
结果:

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
说明:

用于分组的辅助对象(单调递增的组):

设置测试DF:

df = pd.DataFrame({'count': np.arange(20)})
df.ix[6:10, 'count'] = range(5)
df.ix[11:19, 'count'] = range(9)
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
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 = pd.DataFrame({'count': np.arange(20)})
df.ix[6:10, 'count'] = range(5)
df.ix[11:19, 'count'] = range(9)