python - Python Pandas - 如果时间戳落在多个开始时间和结束时间之间,则标记
问题描述
我有两个数据框,一个是一系列时间戳和数据,另一个包含每行的开始和结束时间。让我们分别调用这些 df_series 和 df_interval。
我想在 df_series 中创建一个新列,然后遍历 df_interval 的每一行并在 df_series 介于开始时间和结束时间之间时引发一个标志。
我首先在 df_series 中创建一个空列,然后遍历行并应用 np.where 函数。
为了完整起见,df_series['ts'] 对应于时间戳,df_event['start'] 对应于开始时间,df_event['end'] 对应于结束时间。
df_series['event'] = np.nan
for index, row in df_event.iterrows():
df_series['event'] = np.where((df_series['ts'] > row['start']) & (df_series['ts'] < row['end']), 1, 0)
但是,当我运行上面的代码时,尽管“ts”的值介于“start”和“end”的值之间,但它只返回零值。它不会抛出任何错误,但没有像我预期的那样表现。
解决方案
我通过采取不同的方法解决了这个问题。
首先,创建一个空数据帧,然后遍历 df_events,根据每一行对 df_series 应用掩码,并将结果附加到这个空数据帧。然后将新数据框与现有的 df_series 合并。请参阅下面的示例代码。
events = pd.DataFrame()
for index, row in df_events.iterrows():
mask = (df_series['ts'] >= row['start']) & (df_series['ts'] <= row['end'])
events = events.append(df_series.loc[mask])
events['event'] = 1
events = events['event']
series_events = df_series.merge(events, left_index=True, right_index=True, how='left')
推荐阅读
- oracle - 如何引用表单数据以在 Apex Oracle 中的表单本身中使用它
- c# - 在 NLog 中使用多个依赖注入容器时没有输出
- java - 无法使用 Spring Data Couchbase 将 JSON 对象从 Couchbase 映射到 DTO 实体
- elasticsearch - 标准分析器的 Elasticsearch 自定义分隔符
- python - 过滤轴对象中的数据
- reactjs - 反应自定义钩子
- discord - 什么是discord中的公会ID?
- c - 无法解释 linux 中的控制运算符
- react-native - Sec-WebSocket-Protcol 不适用于本机反应
- python - 如何更有效地在visual-stuido中注释代码?