Python 对指定时间内出现的列值进行计数
我有一个多索引数据帧,df: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
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