我有两个数据帧,其中一个是时间戳,另一个也有时间戳,但有间隙.这两个数据帧在时间戳上有些重叠,有些则不重叠.MWe:

此代码创建第一个数据帧:

daterange = pd.date_range(start='1/1/2023 09:30:00', end='1/3/2023 09:35:00', freq = 'min') 

daterange_keep = (pd.DatetimeIndex(pd.to_datetime(daterange))
          .indexer_between_time('09:30', '09:35') 
       )

firstdf= pd.DataFrame(daterange[daterange_keep])
firstdf.columns = ['timestamp']
firstdf

这将创建以下数据帧,时间为1月1日至1月3日的9:30至9:33:

enter image description here

第二个数据帧如下所示:

seconddf = pd.DataFrame({'timestamp': ['2023-01-01 09:30:00', '2023-01-01 09:32:00', '2023-01-01 09:34:00', '2023-02-01 09:30:00'], 'value': [3,5,7,9]})
seconddf

enter image description here

我想合并两个帧,保留第一个帧中的所有时间戳,并为第二个帧中丢失的数据插入NaN,并删除第二个帧中不在第一个帧中的所有数据.所需输出为:

enter image description here

执行此操作的最佳方式是什么?(理想情况下,我还可以重命名‘Value’列,但我假设我可以独立于合并来执行此操作.)

显而易见的方式似乎是firstdf.merge(seconddf, how = 'inner'),但这会产生一个错误,告诉我应该使用concat,而我不知道concat如何实现这种合并.

推荐答案

您是否错过了将timestamp个第二个数据帧转换为datetime64个数据帧?

seconddf['timestamp'] = pd.to_datetime(seconddf['timestamp'])
out = firstdf.merge(seconddf, on='timestamp', how='left')

输出:

>>> out
             timestamp  value
0  2023-01-01 09:30:00    3.0
1  2023-01-01 09:31:00    NaN
2  2023-01-01 09:32:00    5.0
3  2023-01-01 09:33:00    NaN
4  2023-01-01 09:34:00    7.0
5  2023-01-01 09:35:00    NaN
6  2023-01-02 09:30:00    NaN
7  2023-01-02 09:31:00    NaN
8  2023-01-02 09:32:00    NaN
9  2023-01-02 09:33:00    NaN
10 2023-01-02 09:34:00    NaN
11 2023-01-02 09:35:00    NaN
12 2023-01-03 09:30:00    NaN
13 2023-01-03 09:31:00    NaN
14 2023-01-03 09:32:00    NaN
15 2023-01-03 09:33:00    NaN
16 2023-01-03 09:34:00    NaN
17 2023-01-03 09:35:00    NaN

您还可以使用:

dmap = seconddf.set_index('timestamp')['value']
firstdf['value'] = firstdf['timestamp'].map(dmap)

使用索引:

out = (seconddf.set_index('timestamp')
               .reindex(firstdf['timestamp'])
               .reset_index())

Python相关问答推荐

如何以实现以下所述的预期行为的方式添加两只Pandas pyramme

try 使用tensorFlow.keras.models时optree Import错误

Django序列化器没有验证或保存数据

将列表中的元素替换为收件箱中的元素

telegram 机器人API setMyName不起作用

由于瓶颈,Python代码执行太慢-寻求性能优化

如何销毁框架并使其在tkinter中看起来像以前的样子?

如何使用Google Gemini API为单个提示生成多个响应?

根据另一列中的nan重置值后重新加权Pandas列

为什么我的Python代码在if-else声明中的行之前执行if-else声明中的行?

查找两极rame中组之间的所有差异

Python库:可选地支持numpy类型,而不依赖于numpy

django禁止直接分配到多对多集合的前端.使用user.set()

如何创建一个缓冲区周围的一行与manim?

有没有一种方法可以从python的pussompy比较结果中提取文本?

移动条情节旁边的半小提琴情节在海运

给定高度约束的旋转角解析求解

在pandas/python中计数嵌套类别

如何在海上配对图中使某些标记周围的黑色边框

30个非DATETIME天内的累计金额