Pandas:以不同的采样率合并两个数据帧而不复制值

2024-04-29 17:09:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个不同的熊猫,一个是60毫秒取样,另一个是1秒取样

tobii_df

    datetime, col1 
0  2017-08-24 12:59:00.753, 1.3  
...
1  2017-08-24 12:59:13.753, 7.2 
2  2017-08-24 12:59:13.773, 6.1 
3  2017-08-24 12:59:13.793, 5.1 
4  2017-08-24 13:00:00.813, 5.4 

hr_df

    datetime, col2 
0  2017-08-24 12:59:00, 60
1  2017-08-24 13:00:00, 64
2  2017-08-24 13:01:00, 63 
3  2017-08-24 13:02:00, 67 
4  2017-08-24 13:03:00, 61 

我希望最终结果是

    datetime, col1, col2
0  2017-08-24 12:59:00.753, 1.3, 60
...
1  2017-08-24 12:59:13.753, 7.2,
2  2017-08-24 12:59:13.773, 6.1,
3  2017-08-24 12:59:13.793, 5.1,
4  2017-08-24 13:00:00.813, 5.4, 64

这段代码合并了两个数据帧,但在df1的几个读数上复制了值60。你知道吗

hr_df = hr_df.sort_values(by='datetime')
tobii_df = tobii_df.sort_values(by='datetime')
hr_df = hr_df.set_index('datetime')
tobii_df = tobii_df.set_index('datetime')

merged_df = pd.merge_asof(tobii_df, hr_df, left_index=True, right_index=True, suffixes=('_', ''))

我也试过了

hr_df = hr_df.set_index('datetime')\
    .reindex(tobii_df.set_index('datetime').index, method='nearest')\
    .reset_index()
merged_df = pd.merge(tobii_df, hr_df, on='datetime')

这也在tobii_df的每个读数上创建了一个副本。两个代码的最终结果类似于此:

    datetime, col1, col2
0  2017-08-24 12:59:00.753, 1.3, 60
...
1  2017-08-24 12:59:13.753, 7.2, 60
2  2017-08-24 12:59:13.773, 6.1, 60
3  2017-08-24 12:59:13.793, 5.1, 60
4  2017-08-24 13:00:00.813, 5.4, 64

Tags: 代码dfdatetimeindexbyhrmergedsort