Группировка столбцов массивов по неделям - PullRequest
1 голос
/ 11 апреля 2020

У меня есть датафрейм с двумя столбцами: date и titles. Значения в date относятся к типу дата-время, и для каждого отдельного дня есть строка в несколько месяцев. Значения в titles, например, ['Harry Potter', 'Lord of the Rings', 'Toy Story', ...], et c.

Я хочу сгруппировать эти данные по неделям.

Я пытался

df_weekly = df.groupby([df.index, pd.Grouper(key='date', freq='W-MON')]).agg({
    'headlines': lambda x: x
})

Это не работает должным образом; У меня все еще остается такое же количество строк, только даты в столбце даты были изменены на последний день недели, на которую пришел исходный день.

Как мне сделать так, чтобы она выглядела

date              titles
--------------------------------
2020-01-27        ['title 1', 'title 2', 'title 3', ...] # concatenated arr from all title arrs in that week
2020-02-03        ['title 1', 'title 2', 'title 3', ...]
...

Я думаю, что задача также состоит в том, чтобы попытаться обработать массивы в столбце title как массивы. Я пытался подключить literal_eval с from ast import literal_eval, но не уверен, как добиться того, что мне нужно сделать.

1 Ответ

0 голосов
/ 11 апреля 2020

Используйте метод resample

(https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.resample.html)

titles = ['HP', 'TS', 'LOR']
index = pd.date_range('1/1/2020', periods=14, freq='D')
series = pd.Series([titles] * 14, index=index)

Таким образом, данные выглядят как

2020-01-01    [HP, TS, LOR]
2020-01-02    [HP, TS, LOR]
2020-01-03    [HP, TS, LOR]
2020-01-04    [HP, TS, LOR]
2020-01-05    [HP, TS, LOR]
2020-01-06    [HP, TS, LOR]
2020-01-07    [HP, TS, LOR]
2020-01-08    [HP, TS, LOR]
2020-01-09    [HP, TS, LOR]
2020-01-10    [HP, TS, LOR]
2020-01-11    [HP, TS, LOR]
2020-01-12    [HP, TS, LOR]
2020-01-13    [HP, TS, LOR]
2020-01-14    [HP, TS, LOR]

Теперь Вы можете использовать resample для группировки по периоду времени, здесь неделя. Sum объединит ваши списки вместе.

series.resample('7D').sum()

Вывод

2020-01-01    [HP, TS, LOR, HP, TS, LOR, HP, TS, LOR, HP, TS...
2020-01-08    [HP, TS, LOR, HP, TS, LOR, HP, TS, LOR, HP, TS...

Если вы хотите уникальные значения, преобразуйте список в набор

series.resample('7D').sum().apply(lambda x: set(x))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...