当从服务器收集网络流量统计数据时,它作为一个递增的计数器出现,并在某个点重置. 假设某个时间范围的数据点看起来像

7
15
22
29     <--- reset happens next
2
5
7
20
25     <--- reset happens again
3
7

总数应为(29—7)+25 + 7 = 54.

我拥有的实际数据包括主机名,例如

host1  5
host2 19
host1 7
host2 29
host1 9
host2 3

如果我在一个pandas的框架中有这些数据,我如何建立滚动和并考虑计数器重置?

FWIW计数器在10^12左右重置,所以我不关心重置和下一个测量点之间丢失的数据.

推荐答案

您可以使用掩码来标识重新启动,将它们相加,然后减go 第一个值:

df = pd.DataFrame({'value': [7,15,22,29,2,5,7,20,25,3,7]})

out = (df.loc[df['value'].diff(-1).fillna(1).gt(0), 'value'].sum()
       -df['value'].iloc[0]
      )

输出:54

same logic per group

df = pd.DataFrame({'group': list('aaaaaabbbbb'),
                   'value': [7,15,22,29,2,5,7,20,25,3,7]})

def total(g):
    return (g[g.diff(-1).fillna(1).gt(0)].sum()
           -g.iloc[0]
          )
    
out = df.groupby('group')['value'].agg(total)

输出:

group
a    27
b    25
dtype: int64

分解:

   group  value
0      a      7   #  -7
1      a     15
2      a     22
3      a     29   # +29
4      a      2
5      a      5   #  +5 = 27

6      b      7   #  -7
7      b     20
8      b     25   # +25
9      b      3
10     b      7   #  +7 = 25

中间体:

   group  value  diff(-1)  fillna(1)  gt(0) iloc[0]
0      a      7      -8.0       -8.0  False       X
1      a     15      -7.0       -7.0  False        
2      a     22      -7.0       -7.0  False        
3      a     29      27.0       27.0   True        
4      a      2      -3.0       -3.0  False        
5      a      5       NaN        1.0   True        
6      b      7     -13.0      -13.0  False       X
7      b     20      -5.0       -5.0  False        
8      b     25      22.0       22.0   True        
9      b      3      -4.0       -4.0  False        
10     b      7       NaN        1.0   True        

NB. 100 can also be simplified to 101.

Python相关问答推荐

Deliveryter Notebook -无法在for循环中更新matplotlib情节(保留之前的情节),也无法使用动画子功能对情节进行动画

管道冻结和管道卸载

在Python 3中,如何让客户端打开一个套接字到服务器,发送一行JSON编码的数据,读回一行JSON编码的数据,然后继续?

如何在Python中使用Pandas将R s Tukey s HSD表转换为相关矩阵''

在pandas数据框中计算相对体积比指标,并添加指标值作为新列

在单次扫描中创建列表

幂集,其中每个元素可以是正或负""""

如何杀死一个进程,我的Python可执行文件以sudo启动?

为什么在FastAPI中创建与数据库的连接时需要使用生成器?

当条件满足时停止ODE集成?

使用字典或列表的值组合

Python日志(log)模块如何在将消息发送到父日志(log)记录器之前向消息添加类实例变量

BeautifulSoup-Screper有时运行得很好,很健壮--但有时它失败了::可能这里需要一些更多的异常处理?

如何求相邻对序列中元素 Select 的最小代价

使用np.fft.fft2和cv2.dft重现相位谱.为什么结果并不相似呢?

为什么后跟inplace方法的`.rename(Columns={';b';:';b';},Copy=False)`没有更新原始数据帧?

类型对象';敌人';没有属性';损害';

是否将Pandas 数据帧标题/标题以纯文本格式转换为字符串输出?

组颠倒大Pandas 数据帧

基于2级列表的Pandas 切片3级多索引