Python-Pandas-合并两个具有不同时间戳频率的数据帧
我有两个数据帧: -第一个有一个带有第二个或亚秒时间步长的时间戳列, -第二个有一个带有1分钟时间步长的timestamp列 现在很明显,如果数据时间间隔相同,两个数据帧的大小将不同,因为它们的数据频率不同 我希望使用更高频率(即最长)的数据帧将它们合并到一个数据帧中,并将另一个数据帧(水平)放在其旁边,以获得当前时间戳的正确数据。这意味着最低频率的数据帧数据将根据当前分钟数据值进行重复 我希望下面的例子能让事情变得更清楚: 数据帧1Python-Pandas-合并两个具有不同时间戳频率的数据帧,python,pandas,dataframe,merge,timestamp,Python,Pandas,Dataframe,Merge,Timestamp,我有两个数据帧: -第一个有一个带有第二个或亚秒时间步长的时间戳列, -第二个有一个带有1分钟时间步长的timestamp列 现在很明显,如果数据时间间隔相同,两个数据帧的大小将不同,因为它们的数据频率不同 我希望使用更高频率(即最长)的数据帧将它们合并到一个数据帧中,并将另一个数据帧(水平)放在其旁边,以获得当前时间戳的正确数据。这意味着最低频率的数据帧数据将根据当前分钟数据值进行重复 我希望下面的例子能让事情变得更清楚: 数据帧1 |--------------------------|--
|--------------------------|------------------|
| datetime | ValueDF1 |
|--------------------------|------------------|
| 2019-12-11 12:00:16.599 | 1 |
|--------------------------|------------------|
| 2019-12-11 12:00:16.17 | 2 |
|--------------------------|------------------|
| 2019-12-11 12:00:17.11 | 3 |
|--------------------------|------------------|
数据帧2
|--------------------------|------------------|
| datetime | ValueDF2 |
|--------------------------|------------------|
| 2019-12-11 12:00 | 4 |
|--------------------------|------------------|
合并
|--------------------------|------------------|-----------------|
| datetime | ValueDF1 | ValueDF2 |
|--------------------------|------------------|-----------------|
| 2019-12-11 12:00:16.599 | 1 | 4 |
|--------------------------|------------------|-----------------|
| 2019-12-11 12:00:16.17 | 2 | 4 |
|--------------------------|------------------|-----------------|
| 2019-12-11 12:00:17.11 | 3 | 4 |
|--------------------------|------------------|-----------------|
有什么建议吗?提前感谢。假设“datetime”列都是datetime格式,我们可以将df1[“datetime”]从秒数中去掉,并使用此新字段进行合并
df1['datetime_min'] = pd.to_datetime([dt.datetime.strftime(d, "%Y-%m-%d %H:%M") for d in df1["datetime"]])
df1.merge(df2,left_on='datetime_min', right_on='datetime', how='left')
这对您有用吗?您是否检查了
pd.merge\u asof()
。希望这有助于:
pd.merge_asof(df1.sort_values('datetime'), df2.sort_values('datetime'))
输出:
datetime ValueDF1 ValueDF2
0 2019-12-11 12:00:16.170 2 4
1 2019-12-11 12:00:16.599 1 4
2 2019-12-11 12:00:17.110 3 4