如何在Julia DataFrame中选择多个DateTime范围?现有代码报ArgError
解决DataFrame多DateTime范围选择的报错问题
问题根源
你用map生成的dt_ranges是多个布尔数组组成的列表,比如两个时间范围就会得到两个和DataFrame行数一致的布尔数组。但DataFrame的行索引只接受单个一维布尔数组,直接传入列表自然会触发ArgError。
修正后的代码
ranges = [(start=DateTime(0), stop=DateTime(10)), (start=DateTime(50), stop=DateTime(70))] # 生成每个时间范围的布尔掩码,再合并成单个掩码(符合任意一个范围就选中该行) dt_mask = reduce(|, map(oh -> (df.datetime .>= oh.start) .& (df.datetime .<= oh.stop), ranges)) # 用合并后的掩码筛选目标行和列j df[dt_mask, j]
额外说明
reduce(|, ...)的作用是把多个布尔数组按元素做逻辑或运算,只要某一行落在任意一个时间范围内,就会被标记为true- 如果有特殊需求要同时满足所有时间范围(这种场景很少见),可以把
|换成&
内容的提问来源于stack exchange,提问作者BAR
相关产品推荐
相关产品推荐

