Python 处理数据帧中的值翻转
我正在处理一个数据帧,其中包含一个由错误计数组成的列。我遇到的问题是计数器在64k后翻转。此外,在长时间运行时,滚动会发生多次。我需要一种方法来纠正这些溢出并获得准确的计数。我不确定它是否总是正常工作,但让我们试试: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
# 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)