Python 如何使用pandas在groupby列上循环?

Python 如何使用pandas在groupby列上循环?,python,pandas,numpy,pandas-groupby,Python,Pandas,Numpy,Pandas Groupby,我的数据帧是这样的 Numbers, user_id, time_stamp 1 2 2013-11-15 03:45:04 2 2 2013-11-29 03:45:04 3 2 2013-12-09 03:45:04 4 2 2013-12-25 03:45:04 5 2 2013-12-31 03:45:04 6 3 2014-01-08 03:45:04 7 3 2014-02-03 03:45:04 7 4 2014-02

我的数据帧是这样的

Numbers, user_id, time_stamp
1   2   2013-11-15 03:45:04
2   2   2013-11-29 03:45:04
3   2   2013-12-09 03:45:04
4   2   2013-12-25 03:45:04
5   2   2013-12-31 03:45:04
6   3   2014-01-08 03:45:04
7   3   2014-02-03 03:45:04
7   4   2014-02-03 03:45:04
我必须找到在至少一周内三天内访问网站的用户id。 我试过了

def gr (group):
    for i in range(1, len(group)-2):
        print (group['time_stamp'].ix[i+2] - group['time_stamp'].ix[i] <= pd.Timedelta(days=7))

df.groupby('user_id').apply(gr)
def gr(组):
对于范围(1,len(组)-2)内的i:

print(group['time\u stamp'].ix[i+2]-group['time\u stamp'].ix[i]下面的代码应该可以工作。但是您的示例似乎没有任何满足您的条件的用户id

(
    df.assign(year=df.time_stamp.dt.year,
              woy=df.time_stamp.dt.weekofyear,
              dow=df.time_stamp.dt.dayofweek)
    .groupby(['user_id','year','woy'])
    .filter(lambda x: x.dow.nunique()>=3)
)

我认为您的代码实际上应该可以工作,除了
ix[I]
试图使用索引标签,而不是整数位置。请尝试使用
.iloc[I,:]

但是您可以使用内置的pandas函数来更有效地执行此操作

Allen举了一个这样的例子,但是如果我正确地理解了这个问题,那么解决方案就不是完全正确的——你要寻找的是任何连续的7天,而不仅仅是一年中的某一周

我认为以下措施应该有效:

weekly_counts=df.set_index('timestamp').groupby('user_id').rolling('7d')['user_id'].count().rename('count')
weekly_max=weekly_counts.groupby(level='user_id').max()
weekly_max[weekly_max>=3].index