【发布时间】:2015-11-07 23:58:54
【问题描述】:
我尝试在网站上搜索实现此功能的好方法(也尝试了一些关于分箱和时间序列的想法),但仍然找不到合适的灵魂。
问题来了
我有两个数据框:
index name time price
1, AAA, 11:37:09.359479, 58.480000,10
2, ABC, 11:37:15.403268, 0.5000000,3
3, ABB, 11:37:15.491515, 0.4500000,2
4, AAA, 11:37:15.604864, 0.5000000,1
5, ABC, 11:37:16.628756, 0.1800000,20
6, ABD, 11:37:21.083105, 0.8000000,7
7, AAA, 11:37:21.423480, 79.030000,10
index name time price
1, ABB, 11:37:15.491525, 0.4500000,2
2, AAA, 11:37:15.604884, 0.5000000,1
3, ABC, 11:37:16.628796, 0.1800000,20
如您所见,数据帧 1 中的索引 3、4、5 对应数据帧 2 中的索引 1、2、3
我需要将这些数据框合并到一个“时间”列中,以便数据框 1 中的记录 3、4、5 索引数据框 2 中的 1、2、3 位于右侧。
这应该是结果:
index_x name_x time_x price_x name_y time_y price_y
1, AAA, 11:37:09.359479, 58.480000,10 Nan ...
2, ABC, 11:37:15.403268, 0.5000000,3 Nan ..
3, ABB, 11:37:15.491515, 0.4500000,2 ABB, 11:37:15.491525, 0.4500000,2
4, AAA, 11:37:15.604864, 0.5000000,1 AAA, 11:37:15.604884, 0.5000000,1
5, ABC, 11:37:16.628756, 0.1800000,20 ABC, 11:37:16.628796, 0.1800000,20
6, ABD, 11:37:21.083105, 0.8000000,7 Nan ..
7, AAA, 11:37:21.423480, 79.030000,10 Nan ..
我遇到了麻烦,因为时间不完全相同(查看最后 2 微秒)。有没有一种很好的方法来合并它以按时间合并这些不完全匹配的时间,但可能给定一些匹配阈值?此外,每条记录不应超过一个匹配项。
如果清楚请告诉我。
非常感谢您!
【问题讨论】:
-
假设您的时间是一个字符串,您可以简单地做的一件事就是去掉时间的最后两位或三位数字,然后执行连接。例如x['time']=x['time'][:-3]
-
这是我的第一个想法,但这会产生一些重复的连接。我需要一种方法来唯一地连接这些记录,这意味着为每条记录找到一个最接近的匹配时间(最小绝对差)。
标签: python pandas merge time-series dataframe