pandas - 如何使用 Pandas 将数据从时间段解析为周期性时间序列
问题描述
我目前正在尝试将带有开始和结束日期的数据从一个数据帧解析到具有周期性时间日期索引的第二个数据帧。df1 是我的输入数据框,我想将其解析为 df2 结构。实际上我不需要这些值本身,我只想标记它们发生的时期。
df1
Start End Value1 Value2
1 2018-01-02 15:20 2018-01-02 19:50 x Nan
2 2018-03-21 05:40 2018-03-22 11:20 a b
3 ...
df2
Value1 Value2
2018-01-02 15:10 False False
2018-01-02 15:20 True False
2018-01-02 15:30 True False
2018-01-02 15:40 True False
...
2018-01-02 19:50 True False
2018-01-02 20:00 False False
我已经得到了 df2 的结构,但我不知道如何转换数据。
date_rng=pd.date_range(start='2018-01-01', end='2018-12-31', freq='10min')
df2=pd.DataFrame(date_rng, columns=['Date'])
df2['datetime'] = pd.to_datetime(df2['Date'])
df2 = df2.set_index('datetime')
df2.drop(['Date'], axis=1, inplace=True)
任何人都可以帮忙吗?非常感谢
解决方案
您可以使用设置为 False 的所有值初始化 df2,然后遍历两个数据帧并检查 df2 中的时间是否在 df1 中的一个/或多个指定间隔内。
这是一个工作示例:
# | create some dummy data
data = [{'Start': '2018-01-02 15:20', 'End': '2018-01-02 19:50', 'Value1': 'x', 'Value2': np.nan},
{'Start': '2018-01-01 00:00:00', 'End': '2018-01-01 00:15:00', 'Value1': 'a', 'Value2': np.nan}]
df1 = pd.DataFrame(data)
df1['Start'] = pd.to_datetime(df1['Start'])
df1['End'] = pd.to_datetime(df1['End'])
date_rng=pd.date_range(start='2018-01-01', end='2018-12-31', freq='10min')
df2=pd.DataFrame(date_rng, columns=['Date'])
df2['Date'] = pd.to_datetime(df2['Date'])
df2 = df2.set_index('Date', drop=True)
# | initialize all values with False
df2['Value1'] = False
df2['Value2'] = False
# | iterate through dataframes (also check if values are NaN)
for _, row_1 in df1.iterrows():
for index_2, row_2 in df2.iterrows():
if not pd.isnull(row_1['Value1']):
row_2['Value1'] = row_1['Start'] <= index_2 and row_1['End'] >= index_2
if not pd.isnull(row_1['Value2']):
row_2['Value2'] = row_1['Start'] <= index_2 and row_1['End'] >= index_2
输出:
Value1 Value2
Date
2018-01-01 00:00:00 True False
2018-01-01 00:10:00 True False
2018-01-01 00:20:00 False False
2018-01-01 00:30:00 False False
.
.
.
推荐阅读
- excel - 如何让 Excel 计算列 P 中等于 O 列中相应值的单元格数?
- docker - 如何将 SSH 从 JENKINS 主机复制到 DOCKER 容器中?
- python - 我不明白这段代码有什么问题
- javascript - 为什么总预算没有更新?
- c# - 如何将“X.PagedList.StaticPagedList”类型的对象转换为“System.Collections.Generic.IAsyncEnumerable”类型
- python - 如何在使用多个列和列名的 pandas 中编写 lambda 表达式?
- angular - Why does my angular app update result only if I resize my screen?
- rxjs - node_modules 没有导出的成员 'BehaviorSubject'
- python - Python - 如果 new_list 具有不同的值,则更新 old_list
- javascript - Angular Universal APP & Lumen API, 本地开发 HttpErrorResponse (Http failure response for (unknown url): 0 Unknown Error)