嗨,我有一个由 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] 删除。
我来说两句