减去两个 ECDF 时间序列

卢卡斯·艾马雷托

嗨,我有一个由 seaborn 绘制的 ECDF 图,如下所示。

我可以通过做得到这个sns.ecdfplot(data=df2, x='time', hue='seg_oper', stat='count')

在此处输入图片说明

我的数据框非常简单:

In [174]: df2
Out[174]: 
           time           seg_oper
265       18475     1->0:ADD['TX']
2342      78007     0->1:ADD['RX']
2399      78613  1->0:DELETE['TX']
2961      87097     0->1:ADD['RX']
2994      87210     0->1:ADD['RX']
...         ...                ...
330823  1002281  1->0:DELETE['TX']
331256  1003545  1->0:DELETE['TX']
331629  1004961  1->0:DELETE['TX']
332375  1006663  1->0:DELETE['TX']
333083  1008644  1->0:DELETE['TX']

[834 rows x 2 columns]

我怎样才能系列。减去0->1:ADD['RX']1->0:DELETE['TX']

我喜欢 seaborn 因为大部分数据处理都是在库内部完成的,但在这种情况下,我需要减去这两个系列......

谢谢。

卢卡斯·艾马雷托

所以第一件事是获得什么seaborn,但手动。在那之后(因为我需要)我可以从另一个系列中减去一个系列。

累积计数

首先,我们需要获得每个系列的累积计数。

In [304]: df2['cum'] = df2.groupby(['seg_oper']).cumcount()                                                                                                                                                  

In [305]: df2
Out[305]: 
           time           seg_oper  cum
265       18475     1->0:ADD['TX']    0
2961      87097     0->1:ADD['RX']    1
2994      87210     0->1:ADD['RX']    2
...         ...                ...  ...
332375  1006663  1->0:DELETE['TX']  413
333083  1008644  1->0:DELETE['TX']  414

透视数据

重新排列 DF。

In [307]: df3 = df2.pivot(index='time', columns='seg_oper',values='cum').reset_index()

In [308]: df3
Out[308]: 
seg_oper     time  0->1:ADD['RX']  1->0:ADD['TX']  1->0:DELETE['TX']
0           18475             NaN             0.0                NaN
1           78007             0.0             NaN                NaN
2           78613             NaN             NaN                0.0
3           87097             1.0             NaN                NaN
4           87210             2.0             NaN                NaN
..            ...             ...             ...                ...
828       1002281             NaN             NaN              410.0
829       1003545             NaN             NaN              411.0
830       1004961             NaN             NaN              412.0
831       1006663             NaN             NaN              413.0
832       1008644             NaN             NaN              414.0

[833 rows x 4 columns]

填补空白

我假设这些NaN值可以用行的前一个值填充,直到下一个。

df3=df3.fillna(method='ffill')

此时,如果您进行绘图,df3您将获得sns.ecdfplot(df2)与 seaborn相同的效果。

我仍然想从另一个系列中减去一个系列。

df3['diff'] = df3["0->1:ADD['RX']"] - df3["1->0:DELETE['TX']"]
df3.plot(x='time') 

下面的情节,是结果。

在此处输入图片说明

pd:我不明白对这个问题的反对票。如果有人可以解释,我将不胜感激。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章