我具有以下数据结构(json)
select sku.*, tn.tradename, tn.manual
from sku join
tradenames as tn
on instr(sku.description, tn.tradename) > 0;
在测试场景中,它的固定间隔为10,即500个元素的成功=正确比500个成功的=假
我需要每秒绘制单个图形总和的成功率和失败率 首先,我有以下代码:
[
{"uid":0,"success":true,"timestamp":10, ....someotherfields },
{"uid":1,"success":true,"timestamp":20, ....someotherfields },
.....
]
我认为应该画出与X平行的线,并带有每秒的数据事件数(在我的情况下为〜100)
但是我要跟随图片
[![在此处输入图片描述] [1]] [1]
答案 0 :(得分:1)
这里发生了几件事。第一个是,我相信您想使用python布尔型True
而不是python中的javascript true
,后者会被读取为字符串,并且当您尝试对数据进行分组和求和时,此列将由于无法求和而被删除。
第二,当您根据时间戳对数据进行分组时,无需使用unstack
,只需指定要绘制的列即可。
df.groupby([df['timestamp'].dt.second]).sum().plot(y='success')
同时绘制True和False值线比较棘手。如果您知道计数总是等于100,则可以从100中减去成功来获得失败,但是更安全的方法类似于原始帖子的操作:
创建一些示例数据:
df = pd.DataFrame({'timestamp': list(range(0, 10000, 10)),
'uid': list(range(0, 1000))})
df['success'] = np.random.choice([True, False], 1000)
绘制数据:
df.groupby([df['timestamp'].dt.second, 'success']).size().unstack(fill_value=0).plot()
答案 1 :(得分:1)
要绘制2条线:我很确定熊猫.plot()
函数会清除以前的所有图,因此两次调用.plot()
仅会显示第二条。
那么,您有2个选择。
将数据透视一下,因此在一行上是带有时间戳的成功计数与失败计数
直接通过plotly
模块访问matplotlib
。
第一个选择将意味着转换数据,以便单行看起来像:
timestamp | success_metric | failure_metric
。然后,您可以使用一次plot()
来绘制两条线。
第二种选择涉及从熊猫数据框中将相关数据作为2个数组拉出,导入matplotlib.plotly
,然后直接绘制它们。