我有一个列(来自我的原始数据),我已经从一个字符串转换为Pandas中的datetime-object。
该列如下所示:
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(频率)
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文档在这些简单的频率计算上非常详细。
另外,为了概括这一点,我将如何:
也许解决方案很长,在那里我可能需要做很多事情:split-apply-combine ...但我被认为是Pandas简化/抽象了很多工作,这就是为什么我我现在被困住了。
此文件的来源可视为与服务器日志文件等效的内容。
答案 0 :(得分:2)
您可以先获取日期时间的日期部分,然后使用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
答案 1 :(得分:0)
该聚会迟到了,但今天是dataframe.date_time_column.resample('1D').count()