我有以下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
我正在使用以下代码按周分组:
test.groupby(pd.Grouper(freq='W'))
我收到一个错误,指出Grouper仅对DatetimeIndex有效,但是我不熟悉如何按周分组的结构。
答案 0 :(得分:2)
可能您将date
列作为字符串。
为了在频率Grouper
中使用它,请从将该列转换为DateTime
开始:
df['date'] = pd.to_datetime(df['date'])
然后,由于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)
请注意,组密钥(name
)是一周的结束日期,因此组成员的日期要早于打印的日期或等于以上。
您可以通过将label='left'
参数传递给Grouper
来对其进行更改。