【问题标题】:Pandas GroupBy Date ChunksPandas GroupBy 日期块
【发布时间】:2017-07-03 14:56:38
【问题描述】:

我正在尝试将 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,或者只是通过重组和工作。

编辑:我最终想根据他们每天块的苹果数量来制作用户列表,所以不想得到每天块苹果的总和或平均值。很抱歉造成混乱!

提前谢谢你!

【问题讨论】:

    标签: python pandas pandas-groupby


    【解决方案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]
    

    【讨论】:

    • 谢谢!这也有效,但不是我要找的 - 抱歉,我不清楚!请查看我的编辑。
    • 很高兴能帮上忙,美好的一天!
    【解决方案2】:

    尝试使用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]
    

    【讨论】:

    • 谢谢!这确实有效,但我的问题不够清楚 - 请参阅我上面的编辑,抱歉!
    • 查看我的编辑 -- 我看到您已经接受了上述答案,但这是另一种方法!
    猜你喜欢
    • 1970-01-01
    • 2016-07-12
    • 2020-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多