Сравните два столбца даты в pandas DataFrame, чтобы проверить третий столбец - PullRequest
1 голос
/ 21 апреля 2020

Справочная информация
Я работаю над DataFrame, где я успешно соединил два разных набора данных футболистов, используя fuzzymatcher. Эти наборы данных не имели ключей для точного соответствия и должны были быть сделаны по их именам. Пример совпадения столбца имени из двух баз данных для объединения в одну:

long_name       name
L. Messi        Lionel Andrés Messi Cuccittini

В рамках процесса проверки базы данных из 18 000 строк я хочу проверить два столбца даты рождения в объединенный DataFrame - df, обеспечивающий совпадение столбцов, как в примере ниже

dob             birth_date
1987-06-24      1987-06-24

Оба столбца даты были преобразованы из строк в даты с использованием pd.to_datetime(), например,

df['birth_date'] = pd.to_datetime(df['birth_date'])

Мой вопрос
Мой запрос, у меня есть еще один столбец с именем 'value'. Я хочу обновить мой pandas DataFrame, чтобы при совпадении двух столбцов даты запись не изменялась. Однако, если два столбца даты не совпадают, я хочу, чтобы данные в этом столбце значений были изменены на ноль. Это то, что я могу сделать довольно легко в Excel с вычислением date_diff, но я не уверен в pandas.

Мой текущий код следующий:

df.loc[(df['birth_date'] != df['dob']),'value'] = np.nan

Причина этого шага (не стесняйтесь пропускать)
Причина этого кода в том, что он быстро покажет мне нечеткие совпадения, которые являются неточными (примерно 10% от общей базы данных), и позволит мне быстро исправить их.

В идеале мне нужно также поработать над алгоритмом сопоставления, чтобы обеспечить идеальное совпадение по дате, однако мой текущий алгоритм в настоящее время работает достаточно хорошо в своем текущем состоянии, и проект почти завершен. Любой совет по этому поводу, однако я был бы рад услышать, если это то, что вы знаете о

Большое спасибо заранее!

1 Ответ

1 голос
/ 21 апреля 2020

IICU: пожалуйста, попробуйте np.where. Работает следующим образом:

np.where(if condition, assign x, else assign y)

if condition = df.loc [(df ['birth_date']! = Df ['dob'], x = np.nan и y = преобладающий df.value

df['value']= np.where(df.loc[(df['birth_date'] != df['dob']),'value'], np.nan, df['value'])
...