根据日期时间值组合数据帧
Combining dataframes based on datetime values
我想根据比较时间的逻辑合并两个熊猫数据集。
我有以下两个数据集。
df1
df1 = pd.DataFrame({'Timestamp': ['2022-03-20 08:25:01', '2022-03-20 08:25:02', '2022-03-20 08:25:03', '2022-03-20 08:25:04', '2022-03-20 08:25:05', '2022-03-20 08:25:06'],
'Temperature': ['650', '720', '40', '30', '500', '130']})
df2
df2 = pd.DataFrame({'Testphase': ['A1', 'A2', 'A3'],
'Begin_time': ['2022-03-20 08:25:01', '2022-03-20 08:25:04', '2022-03-20 08:25:30'],
'End_time': ['2022-03-20 08:25:03', '2022-03-20 08:25:05' , '2022-03-20 08:25:35']})
期望的 df
现在我想在 df2 的 'Begin_time' 和 'End_time' 的基础上将 Testphase 添加到 df1。如果时间在这些时间之间或在这些时间之间,我想添加 'Testphase' 的值。
这是期望的结果:
df_desired = pd.DataFrame({'Timestamp': ['2022-03-20 08:25:01', '2022-03-20 08:25:02', '2022-03-20 08:25:03', '2022-03-20 08:25:04', '2022-03-20 08:25:05', '2022-03-20 08:25:06'],
'Testphase': ['A1', 'A1', 'A1', 'A2', 'A2', 'NAN'],
'Temperature': ['650', '720', '40', '30', '500', '130']})
我有两个想法
- 在 df1 的行上迭代逻辑 Begin_time
时添加 'Testphase'
- 创建一个新的数据框,它是 df2 的分解版本,每秒都有行,然后使用时间戳将新的数据框合并到 pandas.DataFrame.join 的 df1。
但我不知道如何实际编码。
你可以试试pd.IntervalIndex
#df2.Begin_time = pd.to_datetime(df2.Begin_time)
#df2.End_time = pd.to_datetime(df2.End_time)
df2.index = pd.IntervalIndex.from_arrays(left = df2.Begin_time,right = df2.End_time,closed='both')
df1['new'] = df2.Testphase.reindex(pd.to_datetime(df1.Timestamp)).tolist()
df1
Out[209]:
Timestamp Temperature new
0 2022-03-20 08:25:01 650 A1
1 2022-03-20 08:25:02 720 A1
2 2022-03-20 08:25:03 40 A1
3 2022-03-20 08:25:04 30 A2
4 2022-03-20 08:25:05 500 A2
5 2022-03-20 08:25:06 130 NaN
我想根据比较时间的逻辑合并两个熊猫数据集。 我有以下两个数据集。
df1
df1 = pd.DataFrame({'Timestamp': ['2022-03-20 08:25:01', '2022-03-20 08:25:02', '2022-03-20 08:25:03', '2022-03-20 08:25:04', '2022-03-20 08:25:05', '2022-03-20 08:25:06'],
'Temperature': ['650', '720', '40', '30', '500', '130']})
df2
df2 = pd.DataFrame({'Testphase': ['A1', 'A2', 'A3'],
'Begin_time': ['2022-03-20 08:25:01', '2022-03-20 08:25:04', '2022-03-20 08:25:30'],
'End_time': ['2022-03-20 08:25:03', '2022-03-20 08:25:05' , '2022-03-20 08:25:35']})
期望的 df
现在我想在 df2 的 'Begin_time' 和 'End_time' 的基础上将 Testphase 添加到 df1。如果时间在这些时间之间或在这些时间之间,我想添加 'Testphase' 的值。 这是期望的结果:
df_desired = pd.DataFrame({'Timestamp': ['2022-03-20 08:25:01', '2022-03-20 08:25:02', '2022-03-20 08:25:03', '2022-03-20 08:25:04', '2022-03-20 08:25:05', '2022-03-20 08:25:06'],
'Testphase': ['A1', 'A1', 'A1', 'A2', 'A2', 'NAN'],
'Temperature': ['650', '720', '40', '30', '500', '130']})
我有两个想法
- 在 df1 的行上迭代逻辑 Begin_time
时添加 'Testphase' - 创建一个新的数据框,它是 df2 的分解版本,每秒都有行,然后使用时间戳将新的数据框合并到 pandas.DataFrame.join 的 df1。
但我不知道如何实际编码。
你可以试试pd.IntervalIndex
#df2.Begin_time = pd.to_datetime(df2.Begin_time)
#df2.End_time = pd.to_datetime(df2.End_time)
df2.index = pd.IntervalIndex.from_arrays(left = df2.Begin_time,right = df2.End_time,closed='both')
df1['new'] = df2.Testphase.reindex(pd.to_datetime(df1.Timestamp)).tolist()
df1
Out[209]:
Timestamp Temperature new
0 2022-03-20 08:25:01 650 A1
1 2022-03-20 08:25:02 720 A1
2 2022-03-20 08:25:03 40 A1
3 2022-03-20 08:25:04 30 A2
4 2022-03-20 08:25:05 500 A2
5 2022-03-20 08:25:06 130 NaN