python - Pandas :计算列中日期时间对象的频率

标签 python python-2.7 pandas

我有一个列(来 self 的原始数据),我已将其从字符串转换为 Pandas 中的日期时间对象。

列看起来像这样:

0     2012-01-15 11:10:12
1     2012-01-15 11:15:01
2     2012-01-16 11:15:12
3     2012-01-16 11:25:01
...
4     2012-01-22 11:25:11
5     2012-01-22 11:40:01
6     2012-01-22 11:40:18
7     2012-01-23 11:40:23
8     2012-01-23 11:40:23
...
9     2012-01-30 11:50:02
10    2012-01-30 11:50:41
11    2012-01-30 12:00:01
12    2012-01-30 12:00:34
13    2012-01-30 12:45:01
...
14    2012-02-05 12:45:13
15    2012-01-05 12:55:01
15    2012-01-05 12:55:01
16    2012-02-05 12:56:11
17    2012-02-05 13:10:01
...
18    2012-02-11 13:10:11
...
19    2012-02-20 13:25:02
20    2012-02-20 13:26:14
21    2012-02-20 13:30:01
...
22    2012-02-25 13:30:08
23    2012-02-25 13:30:08
24    2012-02-25 13:30:08
25    2012-02-26 13:30:08
26    2012-02-27 13:30:08
27    2012-02-27 13:30:08
28    2012-02-27 13:30:25
29    2012-02-27 13:30:25

我想做的是计算每个日期出现的频率。如您所见,我遗漏了一些日期,但如果我手动计算频率(对于可见值),我将:

2012-01-15 - 2 (frequency)

2012-01-16 - 2

2012-01-22 - 3

2012-01-23 - 2

2012-01-30 - 5

2012-02-05 - 5

2012-02-11 - 1

2012-02-20 - 3

2012-02-25 - 3

2012-02-26 - 1

2012-02-27 - 4

这是每天的频率,我想算一下。到目前为止,我已经尝试过这个:

df[df.str.contains(r'^\d\d\d\d-\d\d-\d\d')].value_counts()

我知道它失败了,因为这些不是“字符串”对象,但我不确定如何计算它。

我也查看了 .dt 属性,但 Pandas 文档对这些简单的频率计算非常冗长。


此外,为了概括这一点,我将如何:

  1. 将每日频率应用于每周频率(例如周一至周日)
  2. 将每日频率应用到每月频率(例如,我在我的专栏中看到“2012-01-**”的次数)
  3. 在其他列中使用每日/每周/每月限制(例如,如果我有一个包含“GET 请求”的列,我想知道每天、每周和每月发生了多少次)
  4. 应用每周限制和另一个限制(例如,我有一个返回“404 Not found”的列,我想检查有多少“我每周收到的 404 Not found” )

也许解决方案很长,我可能需要做很多:split-apply-combine ...但我相信 Pandas 简化/抽象了很多工作,这就是为什么我我现在卡住了。

这个文件的来源可以被认为是等同于服务器日志文件的东西。

最佳答案

您可以先获取日期时间的日期部分,然后使用value_counts:

s.dt.date.value_counts()

小例子:

In [12]: s = pd.Series(pd.date_range('2012-01-01', freq='11H', periods=6))

In [13]: s
Out[13]:
0   2012-01-01 00:00:00
1   2012-01-01 11:00:00
2   2012-01-01 22:00:00
3   2012-01-02 09:00:00
4   2012-01-02 20:00:00
5   2012-01-03 07:00:00
dtype: datetime64[ns]

In [14]: s.dt.date
Out[14]:
0    2012-01-01
1    2012-01-01
2    2012-01-01
3    2012-01-02
4    2012-01-02
5    2012-01-03
dtype: object

In [15]: s.dt.date.value_counts()
Out[15]:
2012-01-01    3
2012-01-02    2
2012-01-03    1
dtype: int64

关于python - Pandas :计算列中日期时间对象的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32154262/

相关文章:

带有嵌套列表的 Python pandas sort_values()

python - 获取视频文件的尺寸

python - 您的 shell 尚未正确配置为在 dockerfile 上使用 'conda activate'

python - 任意形状 NumPy 数组的点积

python - 将元组的整数转换为元组的字符串

python-2.7 - 使用 python/scapy 遍历 pcap 文件包

python - 如何在求和值时将 DateTime 拆分为 Year 和 Month?

python - 使用 Pandas 将列转换为行

Python Pandas 过滤和创建新的数据框

python-2.7 - Odoo如何覆盖默认函数新API