计算指定时间内的列值出现次数

时间:2018-03-28 22:16:48

标签: python pandas

我有一个多索引数据框,df:

name time                    activity
Bill 2013-10-09 05:27:00     run
     2013-10-09 07:23:00     play
     2013-10-09 07:25:00     hw
     2013-10-09 08:25:00     swim
Rick 2014-11-07 06:27:00     eat
     2014-11-07 07:25:00     swim
     2014-11-07 08:25:00     hw
     2014-11-07 10:30:00     play

以名称和时间作为索引。时间是日期时间类型。我想要一个功能,

def find_close_activities(df, a, nhr)

将返回在每个活动实例的nhr小时内发生的活动计数,a。

举个例子,

find_close_activities(df, 'hw', 1)

将返回

play: 1
swim: 2

重要提示:计数名称之间不应重叠。我们应该只搜索在同一个人内发生的活动。我认为这需要一个groupby。

1 个答案:

答案 0 :(得分:1)

IIUC,value_counts使用groupbyjoin这里是比较时间范围

def youfunc(df,my,hour):
    df1=df[df.activity==my]
    s=df.reset_index(level=1).join(df1.reset_index(level=1),rsuffix ='y')
    s=s.loc[s.activity!=s.activityy]
    s['New']=abs((s.time-s.timey).dt.total_seconds()/(hour*3600))
    return s.groupby(level=0).apply(lambda x : x['activity'][x['New']<=1]).value_counts()
youfunc(df,'hw',1)
Out[363]: 
swim    2
play    1
Name: activity, dtype: int64