减去两个 NETCDF 时间序列

substract two ECDF time series

嗨,我有一个 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]

如何从 1->0:DELETE['TX'] 中减去数列 0->1:ADD['RX']

我喜欢 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,您将获得与使用 seaborn 绘制 sns.ecdfplot(df2) 相同的结果。

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

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

下图,就是结果了

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