熊猫按日,周或月分组以获取时间戳

时间:2020-02-20 09:32:48

标签: python pandas

我是熊猫初学者。

我有以下数据:

a = [{"content": '1', "time": 1577870427}, 
     {"content": '4', "time": 1577870427},
     {"content": '2', "time": 1577956827},
     {"content": '3', "time": 1580548827}, 
     {"content": '4', "time": 1580635227},
     {"content": '5', "time": 1583054427}, 
     {"content": '6', "time": 1583140827}]

我想要:

2020-01: [
     {"content": '1', "time": '2020-01-01'},
     {"content": '4', "time": '2020-01-01'},
     {"content": '2', "time": '2020-01-02'},
    ]

    2020-02: [
     {"content": '3', "time": '2020-02-01'}, 
     {"content": '4', "time": '2020-02-02'},
    ]

    2020-03: [
     {"content": '5', "time": '2020-03-01'}, 
     {"content": '6', "time": '2020-03-02'}
    ]

2 个答案:

答案 0 :(得分:2)

您可以使用time参数通过to_datetimeunit列转换为日期时间,对于自定义格式,请使用Series.dt.strftime

df = pd.DataFrame(a)
d = pd.to_datetime(df['time'], unit='s')
df['time'] = d.dt.strftime('%Y-%m-%d')
g = d.dt.strftime('%Y-%m')

d1 = {k: v.to_dict('r') for k, v in df.groupby(g)}

答案 1 :(得分:0)

首先,您应该将字典列表转换为大熊猫DataFrame。如您所见here,这很简单:

import pandas as pd
data = pd.DataFrame(a)

接下来,您要将time列转换为日期时间对象,而不是整数。我所知道的最好方法是在熊猫中使用to_datetime函数。请参阅文档以获取更多详细信息。

data['time'] = pd.to_datetime(data['time'], unit = 's') #should do the trick, but could not test yet...

对于实际分组,pandas提供了非常强大的groupby函数,该函数针对所有DataFrame对象实现。同样,文档将提供详细信息。

data.groupby(['time'])

请注意,如果输出不完全是您想要的输出,则可以使用groupby轻松地对其进行修改,因为它接受映射,函数,标签或标签列表作为参数。如果您稍微玩一点,这应该可以让您得到想要的东西。