Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对指定时间内出现的列值进行计数_Python_Pandas - Fatal编程技术网

Python 对指定时间内出现的列值进行计数

Python 对指定时间内出现的列值进行计数,python,pandas,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 sw

我有一个多索引数据帧,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

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

IIUC,通过使用
value\u counts
groupby
join
来比较时间范围

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
def youfunc(df,my,hour):
df1=df[df.activity==my]
s=df.reset_index(级别=1)。join(df1.reset_index(级别=1),rsuffix='y')
s=s.loc[s.activity!=s.activityy]
s['New']=abs((s.time-s.timey).dt.总秒数()/(小时*3600))

return s.groupby(level=0)。apply(lambda x:x['activity'][x['New']谢谢!是的,我在时间范围比较方面有很多问题。@Estilus yw happy coding