Я пытался использовать настраиваемое сравнение дат с привязкой записей Python. Я нашел этот сайт полезным для разработки алгоритмов сравнения. К сожалению, я считаю, что подход, изложенный здесь, больше не поддерживается. Ссылка на запись веб-сайт дает инструкции по перезаписи compute_vectorize:
from recordlinkage.base import BaseCompareFeature
class CustomFeature(BaseCompareFeature):
def _compute_vectorized(s1, s2):
# algorithm that compares s1 and s2
# return a pandas.Series
return ...
feat = CustomFeature()
feat.compute(pairs, dfA, dfB)
После этого я попытался написать сравнение (которое работает как отдельная функция), но я не знаком с классами и получил ошибку (ниже).
class DateAppr(BaseCompareFeature):
def _compute_vectorized(d1, d2, day_margin = 7):
# Absolute time difference in days
tdelta = d1 - d2
tdays = abs(tdelta.days)
score = 0
if tdays <= day_margin:
score += 1
else:
days_out = min(tdays - day_margin, 100)
penalty = (100-days_out)**2 / 100**2
score += penalty
return pd.Series(score, dtype='float64')
indexer = recordlinkage.Index()
indexer.block(left_on=('district'), right_on=('District'))
candidate_links = indexer.index(df1, df2)
feature = DateAppr('dob', 'min_dob')
date_vectors = feature.compute(candidate_links, x = df1, x_link = df2)
Error
File "/anaconda3/lib/python3.6/site-packages/pandas/core/arrays/datetimelike.py", line 1325, in __rsub__
return -(self - other)
TypeError: unsupported operand type(s) for -: 'DatetimeArray' and 'DateAppr'