我有一个如下所示的数据
data = [(u'Del', datetime.datetime(2019, 11, 1, 0, 0), 59L), (u'Bom', datetime.datetime(2019, 11, 1, 0, 0), 449L), (u'Del', datetime.datetime(2019, 12, 1, 0, 0), 0L), (u'Bom', datetime.datetime(2019, 12, 1, 0, 0), 45L)]
现在我想根据时间对数据进行分组,使其看起来像这样
data = [
[(u'Del', datetime.datetime(2019, 11, 1, 0, 0), 59L), (u'Bom', datetime.datetime(2019, 11, 1, 0, 0), 449L)]
,[(u'Del', datetime.datetime(2019, 12, 1, 0, 0), 0L), (u'Bom', datetime.datetime(2019, 12, 1, 0, 0), 45L)]
]
如您所见,现在是列表列表,其中列表内有两个列表,每个列表包含相似的datetime
。例如,第一个子列表如下所示
[(u'Del', datetime.datetime(2019, 11, 1, 0, 0), 59L), (u'Bom', datetime.datetime(2019, 11, 1, 0, 0), 449L)]
第一个子列表中的项目包含相似的日期时间datetime.datetime(2019, 11, 1, 0, 0)
第二个子列表如下
[(u'Del', datetime.datetime(2019, 12, 1, 0, 0), 0L), (u'Bom', datetime.datetime(2019, 12, 1, 0, 0), 45L)]
第一个子列表中的项目包含相似的日期时间datetime.datetime(2019, 12, 1, 0, 0)
通过执行类似的操作,我可以基于datetime
对数据进行排序(尽管在这种情况下,数据已经由datetime
进行了排序)
import pandas as pd
import datetime
import psycopg2
df = pd.DataFrame(data)
df['Date'] =pd.to_datetime(df[1])
df = df.sort_values(by='Date')
但是我无法根据排序时间对它们进行分组。如何使用pandas
来做到这一点?
答案 0 :(得分:1)
您可以执行以下操作
df = pd.DataFrame(data)
df.columns = ['place','date','value']
output = [x[1].values for x in df.groupby(date)]
输出如下:
[[[u'Del', Timestamp('2019-11-01 00:00:00'), 59], [u'Bom', Timestamp('2019-11-01 00:00:00'), 449]], [[u'Del', Timestamp('2019-12-01 00:00:00'), 0], [u'Bom', Timestamp('2019-12-01 00:00:00'), 45]]]