我有一个多索引数据框,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。
答案 0 :(得分:1)
IIUC,value_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