熊猫按周分组

a12*_*234 2 grouping group-by pandas

我有以下test数据框:

       date                 user  answer  
0      2018-08-19 19:08:19  pga   yes   
1      2018-08-19 19:09:27  pga   no   
2      2018-08-19 19:10:45  lry   no   
3      2018-09-07 19:12:31  lry   yes
4      2018-09-19 19:13:07  pga   yes   
5      2018-10-22 19:13:20  lry   no
Run Code Online (Sandbox Code Playgroud)

我正在使用以下代码按周分组:

test.groupby(pd.Grouper(freq='W'))
Run Code Online (Sandbox Code Playgroud)

我收到一个错误,指出Grouper仅对DatetimeIndex有效,但是我不熟悉如何按周分组的结构。

Val*_*_Bo 5

可能您有date列作为字符串。

为了在Grouper频率范围内使用它,请将此列转换为DateTime

df['date'] = pd.to_datetime(df['date'])
Run Code Online (Sandbox Code Playgroud)

然后,由于该date列是“普通”数据列(而不是索引),因此使用key='date'参数和频率。

综上所述,下面有一个工作示例:

import pandas as pd

d = [['2018-08-19 19:08:19', 'pga', 'yes'],
     ['2018-08-19 19:09:27', 'pga', 'no'],
     ['2018-08-19 19:10:45', 'lry', 'no'],
     ['2018-09-07 19:12:31', 'lry', 'yes'],
     ['2018-09-19 19:13:07', 'pga', 'yes'],
     ['2018-10-22 19:13:20', 'lry', 'no']]
df = pd.DataFrame(data=d, columns=['date', 'user', 'answer'])
df['date'] = pd.to_datetime(df['date'])
gr = df.groupby(pd.Grouper(key='date',freq='W'))
for name, group in gr:
    print(' ', name)
    if len(group) > 0:
        print(group)
Run Code Online (Sandbox Code Playgroud)

请注意,组密钥(name)是一周的结束日期,因此来自组成员的日期早于或等于上面打印的日期。

您可以将传递label='left'参数更改为Grouper