Ошибка слияния кадра валюты / даты - PullRequest
0 голосов
/ 30 мая 2018

Возникли проблемы с объединением двух фреймов данных (xrate и df) на основе currency_str и created_date_time

display(xrate.info())

Int64Index: 1611 entries, 6 to 112
Data columns (total 3 columns):
Date        1611 non-null datetime64[ns]
PX_LAST     1611 non-null object
Currency    1611 non-null object

display(xrate.head(3))

Date       PX_LAST  Currency
2018-05-30  1       CAD
2018-05-29  1       CAD
2018-05-28  1       CAD

Я создал новую дату для слияния:

#df['formatted_created_date_time'] = df['created_date_time'].dt.strftime('%d%m%Y')
df['formatted_created_date_time'] = df['created_date_time'].dt.strftime('%d-%m-%Y')
#convert to date
#df['formatted_created_date_time'] = pd.to_datetime(df['formatted_created_date_time'], format='%d%m%Y')
df['formatted_created_date_time'] = pd.to_datetime(df['formatted_created_date_time'], format='%d-%m-%Y')


display(df.info())

RangeIndex: 3488 entries, 0 to 3487
Data columns (total 43 columns):
created_date_time              3488 non-null datetime64[ns]
rfq_create_date_time           3488 non-null datetime64[ns]
currency_str                   3488 non-null object

display(df.head(3))

dataframe image

Теперь два кадра данных объединены:

result = pd.merge(df, xrate, left_on=['currency_str', 'formatted_created_date_time'], right_on=['Currency', 'Date'], how='left')

display(result.info())

RangeIndex: 3488 entries, 0 to 3487
Data columns (total 43 columns):
created_date_time              3488 non-null datetime64[ns]
rfq_create_date_time           3488 non-null datetime64[ns]
.
.
formatted_created_date_time    3488 non-null datetime64[ns]

Совпадение не удалось:

display(result.head(3))

enter image description here

System Datetime:

enter image description here

Есть идеи на этот счет?

1 Ответ

0 голосов
/ 30 мая 2018

Должно работать хорошо.

Но другое решение - это слияние на string s:

df['formatted_created_date_time'] = df['created_date_time'].dt.strftime('%d-%m-%Y')
xrate['Date'] = xrate['Date'].dt.strftime('%d-%m-%Y')

result = pd.merge(df, xrate, left_on=['currency_str', 'formatted_created_date_time'], 
                             right_on=['Currency', 'Date'], how='left')

Ваше решение должно быть упрощено на floor или date

df['formatted_created_date_time'] = df['created_date_time'].dt.floor('d')
xrate['Date'] = xrate['Date'].dt.floor('d')

result = pd.merge(df, xrate, left_on=['currency_str', 'formatted_created_date_time'], 
                             right_on=['Currency', 'Date'], how='left')
df['formatted_created_date_time'] = df['created_date_time'].dt.date
xrate['Date'] = xrate['Date'].dt.date

result = pd.merge(df, xrate, left_on=['currency_str', 'formatted_created_date_time'], 
                             right_on=['Currency', 'Date'], how='left')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...