日期列表中的时间序列-python

时间:2017-04-14 17:13:56

标签: python python-3.x pandas datetime count

我有一个日期列表(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))

1 个答案:

答案 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())