如何解决在Python中,如何使用日期时间作为条件进行合并不完全精确,但有一些时间差异
我有两个数据框
left = pd.DataFrame([['A',10,datetime(2020,5,17,20,12,28)],\
['B',15,16,22,45)],\
['C',45,12)],\
['D',25,13,57,44)]],\
columns = ['Letter_l','Int_l','Datetime_l'])
和
right = pd.DataFrame([['A',35)],\
['B',30,18,25)],\
['C',40,20)],\
['D',50,\
columns = ['Letter_r','Int_r','Datetime_r'])
我想加入以下三列中的两列:Letter
和Datetime
。
对于日期时间,我不是在寻找完全匹配的内容,而是在正确的数据帧中最大相差10秒。
我知道如何在正常情况下加入:
merged_df = pd.merge(left=left,right=right,how='left',\
left_on=['Letter_l'],right_on=['Letter_r'])
但是我正在寻找的输出是:
|-----|--------------|-----------|--------------------|--------------|-----------|--------------------|
| | Letter_l | Int_l | datetime_l | Letter_r | Int_r | datetime_r |
|-----|--------------|-----------|--------------------|--------------|-----------|--------------------|
| 0 | A | 10 | 2020-05-17 20:12:28| A | 20 | 2020-05-17 20:12:35|
| 1 | C | 20 | 2020-05-17 12:45:12| C | 40 | 2020-05-17 12:45:20|
|-----|--------------|-----------|--------------------|--------------|-----------|--------------------|
可以使用标准的pd.merge
吗?
我当然可以尝试使用sqlite3
解决方法
在asof
上与pd.merge_asof
进行DateTime
合并,公差为10
秒:
df = pd.merge_asof(left.sort_values('Datetime_l'),right.sort_values('Datetime_r'),left_by='Letter_l',right_by='Letter_r',left_on='Datetime_l',right_on='Datetime_r',direction='nearest',tolerance=pd.Timedelta(seconds=10))\
.dropna(subset=['Letter_r'])
结果:
Letter_l Int_l Datetime_l Letter_r Int_r Datetime_r
0 C 20 2020-05-17 12:45:12 C 40.0 2020-05-17 12:45:20
3 A 10 2020-05-17 20:12:28 A 20.0 2020-05-17 20:12:35
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。