вопрос по еженедельной агрегации с использованием python - PullRequest
0 голосов
/ 20 сентября 2019

Учитывая список временных меток в последовательном порядке, вернуть список списков, сгруппированных по неделям (7 дней), используя первую временную метку в качестве начальной точки.

, например:

ts =['2019-01-01', '2019-01-02', '2019-01-08', '2019-02-01', '2019-02-05']

output = [['2019-01-01', '2019-01-02'], ['2019-01-08'], ['2019-02-01', '2019-02-05']]

ts = pd.DataFrame(ts, columns = ['date'])
ts['week'] = pd.to_datetime(ts.date).dt.week
ts.groupby('week')['date'].apply(list).tolist()

есть ли способ решить вышесказанное без использования панд?

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Вот как бы я решил это:

from datetime import datetime as dt
from itertools import groupby

inp = ['2019-01-01','2019-01-02','2019-01-08', '2019-02-01','2019-02-05']
first = dt.strptime(inp[0], "%Y-%m-%d")
out = []

for k, g in groupby(inp, key=lambda d: (dt.strptime(d, "%Y-%m-%d") - first).days // 7 ):
    out.append(list(g))

print out

Вывод:

[['2019-01-01', '2019-01-02'], ['2019-01-08'], ['2019-02-01'], ['2019-02-05']]
0 голосов
/ 20 сентября 2019
from collections import defaultdict
from datetime import datetime as dt
curr = '2019-01-01'
idx = 0
dic = defaultdict(list)
for i in ts:
 if ( dt.strptime(i, '%Y-%m-%d') -  dt.strptime(curr, '%Y-%m-%d')).days < 7 :
     dic[idx].append(i)
 else:
    curr = i
    idx += 1
    dic[idx].append(i)
print(dic.values())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...