【发布时间】:2015-10-14 22:32:53
【问题描述】:
我有以下数据框:
date_time value member
2013-10-09 09:00:00 664639 Jerome
2013-10-09 09:05:00 197290 Hence
2013-10-09 09:10:00 470186 Ann
2013-10-09 09:15:00 181314 Mikka
2013-10-09 09:20:00 969427 Cristy
2013-10-09 09:25:00 261473 James
2013-10-09 09:30:00 003698 Oliver
第二个数据框我有这样的界限:
date_start date_end
2013-10-09 09:19:00 2013-10-09 09:25:00
2013-10-09 09:25:00 2013-10-09 09:40:00
所以我需要创建一个新列,我将在其中写入两个日期时间点之间每个间隔的索引:
类似的东西:
date_time value member session
2013-10-09 09:00:00 664639 Jerome 1
2013-10-09 09:05:00 197290 Hence 1
2013-10-09 09:10:00 470186 Ann 1
2013-10-09 09:15:00 181314 Mikka 2
2013-10-09 09:20:00 969427 Cristy 2
2013-10-09 09:25:00 261473 James 2
2013-10-09 09:30:00 003698 Oliver 2
以下代码创建'session' 列,但不会在'session' 列中写入会话索引(即bounds 数据帧中的行索引),因此不要按间隔分隔初始数据帧:
def create_interval():
df['session']=''
for index, row in bounds.iterrows():
s = row['date_start']
e = row['date_end']
mask=(df['date'] > s) & (df['date'] < e)
df.loc[mask]['session']='[index]'
return df
更新
问题代码bounds['date_start'].searchsorted(df['date_time']) 没有给出我想要获得的结果,即每个区间都有一个索引值:df['Session'] = 1 表示第一个区间,=2 表示第二个区间,依此类推。列Session 旨在分离位于date_start 和date_end 之间的不同区间@ 987654333@
我想如果 df['date_time'] 与 bounds['start_date'] 不同,它已经增加了session 的索引,这不正是我想要的
【问题讨论】:
-
当
bounds中的date_start从09:19:00开始时,我不明白为什么在09:15:00之前的行中会话值为1? -
@EdChum,对不起,我只是给出了我拥有的数据框结构的示例,而不是确切的值!如果您需要确切的值来得出答案,请随时向我询问!
-
请贴出不正确的输出和想要的输出,英文有代码没有的微妙含义
-
像这样:
In [306]: df df['Session'] = bounds['date_start'].searchsorted(df['date_time']) df Out[306]: date_time Session 0 2015-07-30 10:32:54 0 1 2015-07-30 10:32:54 0 2 2015-07-30 10:36:39 1 3 2015-07-30 10:36:39 1 4 2015-07-30 10:36:39 1 5 2015-07-30 10:36:39 1 6 2015-07-30 10:37:00 1 7 2015-07-30 10:37:00 1 8 2015-07-30 10:37:00 1 9 2015-07-30 10:37:00 1和你想要的输出一样 -
这是 searchsorted 的默认行为它匹配然后它的索引是当前索引值之前的位置如果你希望它落入下一个 bin 值那么你需要扩大开始间隔也许从它或类似的时间中减去 1 秒