减去两个 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:我不明白对这个问题的反对票。如果有人能解释一下,我将不胜感激。
嗨,我有一个 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:我不明白对这个问题的反对票。如果有人能解释一下,我将不胜感激。