如何在Pandas中选择日期时间索引范围并使用该条件



我有一个数据帧df与100,000行使用DateTime索引。以1月份的案例为例。我想创建一个新的列,命名为'Experiment',这样可以帮助我识别实验开始和结束的时间,总共有10个实验。

df=
Place      
Time               
2021-01-01 00:00    home         
2021-01-01 00:01    home       
2021-01-01 00:02    home        
2021-01-01 00:03    home     
................    ....  
................    ....
2021-01-31 23:57    home
2021-01-31 23:58    home
2021-01-31 23:59    home

例如,实验A从2021-01-01 00:00 and 2021-01-01 00:02之间开始,实验J从2021-01-31 23:57 and 2021-01-31 23:59之间开始。预期的结果将是这样的。

df=
Place  Experiment
Time               
2021-01-01 00:00    home      A   
2021-01-01 00:01    home      A 
2021-01-01 00:02    home      A  
2021-01-01 00:03    home     
................    ....  
................    ....
2021-01-31 23:57    home      J
2021-01-31 23:58    home      J
2021-01-31 23:59    home      J

我的方法是这样的。

df["experiment"] = ""
df["experiment"] = np.where(df.between_time('2021-01-01 00:00','2021-01-01 00:02'),'A',np.nan)
df["experiment"] = np.where(df.between_time('2021-01-31 23:57','2021-01-31 23:59'),'J',np.nan)

我才意识到between_time不工作时,包括日期。此外,我面临的问题是the Length of values does not match length of index.

谢谢!

现在使用np.where将覆盖您已经创建的内容。

对于多个条件,使用.loc来更新:

# the experiment time
list_starts = ['2021-01-01 00:00','2021-01-31 23:57']
list_ends = ['2021-01-01 00:02', '2021-01-31 23:59']
list_names = ['A','J']
for start_time, end_time, name in zip(list_starts, list_ends, list_names):
df.loc[start_time:end_time, 'experiment'] = name

另一种(更好的)安排实验时间的方法是:

# name: (start, end)
exp_times = {
'A': ('2021-01-01 00:00', '2021-01-01 00:02'),
'J': ('2021-01-31 23:57', '2021-01-31 23:59')
}
for name, (start_time, end_time) in exp_times.items():
df.loc[start_time:end_time, 'experiment'] = name

输出:

Place experiment
Time                                
2021-01-01 00:00:00  home          A
2021-01-01 00:01:00  home          A
2021-01-01 00:02:00  home          A
2021-01-01 00:03:00  home        NaN
2021-01-31 23:57:00  home          J
2021-01-31 23:58:00  home          J
2021-01-31 23:59:00  home          J

注意:您可能已经注意到,您可以使用字符串对时间索引的数据帧进行切片/索引。

相关内容

  • 没有找到相关文章

最新更新