python - Pandas - 以不等间隔绘制事件

标签 python matplotlib pandas jupyter-notebook

我有一个表示事件日志的日期时间对象列表:

 [datetime.datetime(2014, 12, 16, 0, 18, 12),
  datetime.datetime(2014, 12, 16, 0, 18, 27),
  datetime.datetime(2014, 12, 16, 0, 18, 27),
  datetime.datetime(2014, 12, 16, 0, 19, 9),
  datetime.datetime(2014, 12, 16, 0, 19, 39),
  datetime.datetime(2014, 12, 16, 0, 19, 49),
  datetime.datetime(2014, 12, 16, 0, 20, 2),
  datetime.datetime(2014, 12, 16, 0, 20, 19),
  datetime.datetime(2014, 12, 16, 0, 20, 47),
  ...
  datetime.datetime(2014, 12, 16, 6, 23, 43),
  datetime.datetime(2014, 12, 16, 6, 25, 45)]

如何创建每秒事件计数的绘图?例如。值应该是:

  • 1 for datetime.datetime(2014, 12, 16, 0, 18, 12)
  • 0 for datetime.datetime(2014, 12, 16, 0, 18, 13) - datetime.datetime(2014, 12, 16, 0, 18, 26)
  • 2 for datetime.datetime(2014, 12, 16, 0, 18, 27)
  • 等等

我试过这样的:

pd.Series([1 for _ in xrange(len(events_list))], index=events_list).plot()

还有这个:

df = pd.DataFrame({'ts': t, 'value': 1} for t in events_list)
df.pivot_table(index='ts', columns='value', aggfunc=len, fill_value=0).plot()

显然我得到了错误的结果:

Events count

我可以要求指导我完成这个吗?

最佳答案

您可能希望使用“value_counts”来计算特定时间事件的实例数,然后对数据帧重新采样以填充 na,就像这样,

import pandas as pd
import datetime
events = [datetime.datetime(2014, 12, 16, 0, 18, 12),
  datetime.datetime(2014, 12, 16, 0, 18, 27),
  datetime.datetime(2014, 12, 16, 0, 18, 27),
  datetime.datetime(2014, 12, 16, 0, 19, 9),
  datetime.datetime(2014, 12, 16, 0, 19, 39),
  datetime.datetime(2014, 12, 16, 0, 19, 49),
  datetime.datetime(2014, 12, 16, 0, 20, 2),
  datetime.datetime(2014, 12, 16, 0, 20, 19),
  datetime.datetime(2014, 12, 16, 0, 20, 47),
  datetime.datetime(2014, 12, 16, 6, 23, 43),
  datetime.datetime(2014, 12, 16, 6, 25, 45)]
df = pd.DataFrame ({'ts' : events})
df2 = df.ts.value_counts()
df2 = df2.resample('s').fillna(0)
print (df2.head(30))

这应该产生,

2014-12-16 00:18:12    1
2014-12-16 00:18:13    0
2014-12-16 00:18:14    0
2014-12-16 00:18:15    0
2014-12-16 00:18:16    0
2014-12-16 00:18:17    0
2014-12-16 00:18:18    0
2014-12-16 00:18:19    0
2014-12-16 00:18:20    0
2014-12-16 00:18:21    0
2014-12-16 00:18:22    0
2014-12-16 00:18:23    0
2014-12-16 00:18:24    0
2014-12-16 00:18:25    0
2014-12-16 00:18:26    0
2014-12-16 00:18:27    2
2014-12-16 00:18:28    0
2014-12-16 00:18:29    0
2014-12-16 00:18:30    0
2014-12-16 00:18:31    0
2014-12-16 00:18:32    0
2014-12-16 00:18:33    0
2014-12-16 00:18:34    0
2014-12-16 00:18:35    0
2014-12-16 00:18:36    0
2014-12-16 00:18:37    0
2014-12-16 00:18:38    0
2014-12-16 00:18:39    0
2014-12-16 00:18:40    0
2014-12-16 00:18:41    0
Freq: S, dtype: float64

关于python - Pandas - 以不等间隔绘制事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27535246/

相关文章:

python - Pandas drop_duplicates - TypeError : type object argument after * must be a sequence, 未映射

python - Pandas 对给定开始和结束日期的时间序列进行重采样

Python:在 Windows7 中运行守护进程

python - 如何调整 matplotlib 散点图的大小

python - Matplotlib 直方图错误

python - 在 Pandas MultiIndex 中查找 NaN 值

python - 如何在 Django 中重用可重用的应用程序

python - django 从主模板中的外部应用程序获取上下文

python - matplotlib 为图像添加蓝色阴影

python-3.x - Pandas - 将具有不同名称和列数的数据帧堆叠在一起