首页 文章

Pandas GroupBy Date Chunks

提问于
浏览
1

我正在尝试将Pandas Dataframe分组为2天的桶 . 例如,如果我执行以下操作:

df = pd.DataFrame()
df['action_date'] = ['2017-01-01', '2017-01-01', '2017-01-03', '2017-01-04', '2017-01-04', '2017-01-05', '2017-01-06']
df['action_date'] = pd.to_datetime(df['action_date'], format="%Y-%m-%d")
df['user_name'] = ['abc', 'wdt', 'sdf', 'dfe', 'dsd', 'erw', 'fds']
df['number_of_apples'] = [1,2,3,4,5,6,2]
df = df.groupby(['action_date', 'number_of_apples']).sum()

我得到一个按action_date分组的数据框,每天有number_of_apples .

但是,如果我想以2天的时间段查看数据帧,我该怎么办呢?然后我想分析每个date_chunk的number_of_apples,通过为2017-01-01和2017-01-03的日期创建新的数据帧,为2017-01-04和2017-01-05创建另一个,然后是最后一个对于2017-01-06,或者仅仅通过重新组合和工作 .

编辑:我最终希望根据每天大块的苹果数量来制作用户列表,所以不想得到总和,也不想每天大块的苹果 . 对困惑感到抱歉!

先感谢您!

2 回答

  • 1

    你可以使用resample

    print (df.resample('2D', on='action_date')['number_of_apples'].sum().reset_index())
      action_date  number_of_apples
    0  2017-01-01                 3
    1  2017-01-03                12
    2  2017-01-05                 8
    

    编辑:

    print (df.resample('2D', on='action_date')['user_name'].apply(list).reset_index())
      action_date        user_name
    0  2017-01-01       [abc, wdt]
    1  2017-01-03  [sdf, dfe, dsd]
    2  2017-01-05       [erw, fds]
    
  • 1

    尝试使用 TimeGrouper 分组两天 .

    >>df.index=df.action_date
    >>dg = df.groupby(pd.TimeGrouper(freq='2D'))['user_name'].apply(list) # 2 day frequency
    >>dg.head()
    
    action_date
    2017-01-01         [abc, wdt]
    2017-01-03    [sdf, dfe, dsd]
    2017-01-05         [erw, fds]
    

相关问题