我有一个包含两列的数据框:date
和titles
。 date
中的值是datetime类型的,在几个月的时间范围内,每一天都有一行。 titles
中的值分别类似于['Harry Potter', 'Lord of the Rings', 'Toy Story', ...]
等。
我想按星期对数据进行分组。
我尝试过
df_weekly = df.groupby([df.index, pd.Grouper(key='date', freq='W-MON')]).agg({
'headlines': lambda x: x
})
这不能正常工作;我仍然具有相同的行数,只是date列中的日期已更改为原始日期所在的一周中的最后一天。
如何使它看起来像
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
,但不确定如何实现我需要做的事情。
答案 0 :(得分:0)
使用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))