我有一个日期列表(ListA),每个条目代表一个事件。如何在python3中列出时间序列?日期序列将在X轴上,每个日期的频率将在Y
上ListA = [2016-04-05, 2016-04-05, 2016-04-07, 2016-09-10,
2016-03-05, 2016-07-11, 2017-01-01]
期望的输出:
[2016-04-05, 2], [2016-04-06, 0], [2016-04-07, 1],
[2016-04-08, 0], ……………… .., [2017-01-01, 1]
所需的输出格式:
[[Date, Frequency],....,*]
我的日期代码为:
Date=pd.date_range('2016-04-05', '2017-01-01', freq='D')
Print(Date)
给出了:
[2016-04-05,2016-04-06,2016-04-07,....,]
我需要类似以下代码的内容来逐步浏览上面的日期以获取每个日期的频率。
for item in ListA:
if item>=Date[0] and item<Date[1]:
print(ListA.count(item))
答案 0 :(得分:4)
使用#include "init.h"
int main() {
for (auto fn : get_initializers()) {
fn();
}
return 0;
}
模块中的Counter
,这非常简单:
<强>代码:强>
collections
<强>结果:强>
dates = [
'2016-04-05',
'2016-04-05',
'2016-04-07',
'2016-09-10',
'2016-03-05',
'2016-07-11',
'2017-01-01'
]
from collections import Counter
counts = Counter(dates)
print(sorted(counts.items()))
在[('2016-03-05', 1), ('2016-04-05', 2),
('2016-04-07', 1), ('2016-07-11', 1),
('2016-09-10', 1), ('2017-01-01', 1)]
上建立一个列表:
在一系列日期中构建列表列表非常容易,因为pandas.DatetimeIndex
在使用计数为零的值编制索引时将返回Counter
。
0
每天添加数据框:
由于您似乎正在使用# pandas date range
dates = pd.date_range('2016-04-05', '2017-01-01', freq='D')
# counter for date we need counted
counts = Counter(pd.to_datetime(dates))
# build a list using a list comprehension of counts at all dates in range
date_occurence_sequence = [[d, counts[d]] for d in dates]
,因此我们将事件计数插入到每天索引的数据框中。
pandas
<强>结果:强>
import pandas as pd
index = pd.date_range('2016-04-05', '2017-01-01', freq='D')
df = pd.DataFrame([0] * len(index), index=index)
df.update(pd.DataFrame.from_dict(Counter(pd.to_datetime(dates)), 'index'))
print(df.head())