处理数据框中的值翻转

时间:2016-05-11 21:37:08

标签: python pandas

我正在处理一个包含由错误计数组成的列的数据框。我遇到的问题是64k后计数器翻滚。此外,在长时间运行中,翻转会多次发生。我需要一种方法来纠正这些溢出并获得准确的计数。

1 个答案:

答案 0 :(得分: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

每组的Summand:

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)