【问题标题】:How to plot multiple time intervals in pandas overlapped?如何在熊猫重叠中绘制多个时间间隔?
【发布时间】:2020-05-29 14:28:16
【问题描述】:

我有 3 组测量值,来自对具有不同参数的应用程序进行基准测试。每个测试的运行时间相同,但时间戳不同。我想绘制相互重叠的结果。

结果存储在 csv 文件中,格式如下:timestamp,duration。 我在 pandas 数据框中读取结果,将时间戳转换为日期时间并进行聚合以计算我想要显示的 p90rt(下面的代码)

df["timestamp"] = pd.to_datetime(df["timestamp"], unit='ms')
df.set_index("timestamp", inplace=True)
gdf = df.groupby(pd.Grouper(freq=freq)).agg({"duration": q90})

我为我的 3 个数据集执行此操作,然后使用 matplotlib 绘制它们:

ax = gdf_n.plot()
ax = gdf_r.plot(ax=ax)
gdf_p.plot(ax=ax)
plt.axhline(y=3500, color='r', linestyle='-')

但是,由于它们是在不同时间完成的,因此它们的绘制相距甚远。我希望它们重叠(它们都跨越相同的时间 - 4分钟)。我正在寻找某种方法来规范化日期时间索引,以便 3 个图重叠。

df.head()

       timestamp  duration  respCode
0  1589464106981       397       200
1  1589464107015       363       200
2  1589464107046       371       200
3  1589464107123       365       200
4  1589464107024       467       200

【问题讨论】:

  • 您可以将它们全部设置为具有相同的索引或将它们组合到一个数据帧中。
  • 这是我想要但还没有找到的;基本上,分组后,将索引从日期时间转换为每个数据集的列表 0、1、2 等
  • 请问您能发布您的数据吗?或者只显示 df.head()
  • 在问题中编辑以显示头部(第三列无关)
  • 可能最简单的方法是减去时间差,这样它们都同时开始,请参阅此 Q/A; stackoverflow.com/questions/31929538/…

标签: python pandas matplotlib


【解决方案1】:

我找到了一个解决方案,虽然有点老套。我需要时间戳索引才能使用聚合器。因此,在聚合之后,我将每个数据帧写入文件并再次读取以删除索引。之后索引被重置,我可以将它们全部绘制出来。

gdf.to_csv('data.csv')
tdfn = pd.read_csv('data.csv')
tdfn = tdfn["duration"]

【讨论】:

    猜你喜欢
    • 2016-10-18
    • 2021-12-01
    • 2019-08-12
    • 1970-01-01
    • 2020-02-22
    • 2019-09-27
    • 2019-08-19
    • 2014-06-25
    • 1970-01-01
    相关资源
    最近更新 更多