Словарь сопоставления возврата Nan - PullRequest
1 голос
/ 22 апреля 2020

у меня есть два набора данных, и я хочу создать словарь из двух столбцов таблицы A, а затем создать новый столбец в таблице B, который работает как Excel vloopup

Таблица A

Date       Wk of Year   ...Other columns
2020-1-1       1
2020-1-2       1
2020-1-10      2
2020-1-11      2

Таблица B

Shop   Date        Sales   ...Other columns
A      2020-1-1    100
B      2020-1-1    100
C      2020-1-1    100
A      2020-1-10   100

Expected Result
Shop   Date        Sales   Wk of Year
A      2020-1-1    100         1
B      2020-1-1    100         1
C      2020-1-1    100         1
A      2020-1-10   100         2

Код Я создаю словарь из таблицы A

name = pd.to_datetime(Table A['date'])
wk =   Table A['Wk of Year']
dict= dict(zip(name,wk))

Table B['wk'] = pd.to_datetime(Table B ['Date'].map(dict)

Фактический результат:

Shop   Date        Sales   Wk of Year
A      2020-1-1    100         NaT
B      2020-1-1    100         NaT
C      2020-1-1    100         Nat
A      2020-1-10   100         Nat

1 Ответ

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

Попробуйте функцию pandas merge и передайте on arg - это столбец того, что вы хотите присоединить к вашим наборам данных.

Table_merged = pd.merge(Table_B, Table_A['Date', 'Wk_of_Year'], on='Date')

Это создаст ожидаемый вами набор данных:

         Date  Sales Shop  Wk_of_Year
0  2020-01-01    100    A           1
1  2020-01-01    100    B           1
2  2020-01-01    100    C           1
3  2020-01-10    100    D           2

Но если вы все еще хотите использовать свою стратегию - используйте функцию pandas insert:

date_wk_dct = {key: value for key, value in Table_A[['Date', 'Wk_of_Year']].get_values()}
Table_B.insert(3, "Wk_of_Year", [date_wk_dct[v] for v in iter(Table_B['Date'].get_values())], True)

Это вставит новый столбец в ваш существующий набор данных Table_B и результат будет таким же:

         Date  Sales Shop  Wk_of_Year
0  2020-01-01    100    A           1
1  2020-01-01    100    B           1
2  2020-01-01    100    C           1
3  2020-01-10    100    D           2
...