Создание нового столбца путем индексации по строке / столбцу в другой таблице. Ошибка в коде

#python #pandas

#python #pandas

Вопрос:

У меня есть таблица со столбцом для идентификатора участника и столбцом для даты окончания недели, которая выглядит примерно так:

       actor_id   week_end_date   
1     11          14/01/2020      
2     12          21/01/2020      
3     13          14/01/2020      
4     14          28/01/2020     
 

У меня также есть другая таблица поиска, которая выглядит следующим образом:

       01/01/2020   07/01/2020   14/01/2020    21/01/2020   28/01/2020          
11     0.8          0.8          0.95          0.66         0.9
12     0.9          0.6          0.55          0.56         0.88
13     1.0          0.4          0.66          null          0.67
14     0.5          0.2          null          0.8          0.45
 

Значения идентификаторов в первой таблице соответствуют индексу во второй таблице, а столбец даты окончания недели в первой таблице соответствует заголовкам столбцов во второй. Я хочу создать новый столбец в первой таблице, который соответствует столбцу идентификатора индексу, а столбцу даты — заголовку столбца, чтобы получить доступ к значению оценки. Например, если значение идентификатора равно 13, а дата равна 14/01/2020, тогда значение должно быть 0,66.

Результат должен выглядеть так:

       actor_id   week_end_date  score  
1     11          14/01/2020     0.95 
2     12          21/01/2020     0.56 
3     13          14/01/2020     0.66
4     14          28/01/2020     0.45
 

Я выполнил следующее, но получаю сообщение об ошибке, когда строки не отображаются во второй таблице

 table1['score'] = table2.lookup(table1.actor_id, table1.week_end_date)

KeyError: 'One or more column labels was not found'
 

Вот данные для таблицы 2:

 {'2020-09-18': {100000151529577: 0.7884615384615381,
  100000168029563: 0.9047619047619041,
  100000217919567: 1.0},
 '2020-09-25': {100000151529577: 0.8685897435897432,
  100000168029563: 0.9023809523809521,
  100000217919567: 1.0},
 '2020-10-02': {100000151529577: 0.8636126745882837,
  100000168029563: 0.899459642012833,
  100000217919567: 1.0},
 '2020-10-09': {100000151529577: 0.9070984680740773,
  100000168029563: 0.9079498598053762,
  100000217919567: nan},
 '2020-10-16': {100000151529577: 0.8796030343796227,
  100000168029563: 0.9087264428400236,
  100000217919567: nan},
 '2020-10-23': {100000151529577: 0.9062535083532426,
  100000168029563: 0.9298645190811586,
  100000217919567: nan},
 '2020-10-30': {100000151529577: 0.9241415262412603,
  100000168029563: 0.9470803179346093,
  100000217919567: nan},
 '2020-11-06': {100000151529577: 0.9206960425319156,
  100000168029563: 0.9373835471065347,
  100000217919567: nan},
 '2020-11-13': {100000151529577: 0.9331921449951585,
  100000168029563: 0.9092228036424824,
  100000217919567: nan}}
 

Вот данные для таблицы 1:

     {'actor_id_intial_review': {13136: 100000217919567,
  36458: 100000217919567,
  44911: 100000217919567,
  46438: 100000217919567,
  81365: 100000217919567,
  85164: 100000217919567,
  90500: 100000217919567,
  90615: 100000217919567,
  96797: 100000217919567,
  117933: 100000217919567,
  122622: 100000217919567,
  134176: 100000217919567,
  136793: 100000217919567,
  141525: 100000217919567,
  170583: 100000217919567,
  173947: 100000217919567,
  174717: 100000217919567,
  202140: 100000217919567,
  218028: 100000217919567,
  246709: 100000217919567,
  253509: 100000217919567,
  296325: 100000217919567,
  299911: 100000217919567,
  305295: 100000217919567,
  348334: 100000217919567,
  377124: 100000217919567,
  394816: 100000217919567,
  442361: 100000217919567,
  473015: 100000217919567,
  568644: 100000217919567,
  577591: 100000217919567,
  580509: 100000217919567,
  720516: 100000217919567,
  745977: 100000217919567,
  769787: 100000217919567,
  778840: 100000217919567,
  782353: 100000217919567,
  810651: 100000217919567,
  813219: 100000217919567,
  826088: 100000217919567,
  840808: 100000217919567,
  841324: 100000217919567,
  906253: 100000217919567,
  909337: 100000217919567,
  985510: 100000217919567,
  1018408: 100000217919567,
  1050752: 100000217919567,
  1051113: 100000217919567,
  1052263: 100000217919567,
  1075794: 100000217919567,
  1083932: 100000217919567,
  1108915: 100000217919567,
  1117019: 100000217919567,
  1122138: 100000217919567,
  1127150: 100000217919567,
  1132493: 100000217919567,
  1134987: 100000217919567,
  1152049: 100000217919567,
  1152106: 100000217919567,
  1183398: 100000217919567,
  1189886: 100000217919567,
  1190308: 100000217919567,
  1203364: 100000217919567,
  1205628: 100000217919567,
  1218831: 100000217919567,
  1223462: 100000217919567,
  1226553: 100000217919567,
  1255579: 100000217919567,
  1281205: 100000217919567,
  1291587: 100000217919567,
  1304344: 100000217919567,
  1308887: 100000217919567,
  1317417: 100000217919567,
  1338837: 100000217919567,
  1383861: 100000217919567,
  1390182: 100000217919567,
  1398967: 100000217919567,
  1440998: 100000217919567,
  1511552: 100000217919567,
  1544349: 100000217919567,
  1552965: 100000217919567,
  1583477: 100000217919567,
  1600032: 100000217919567,
  1605280: 100000217919567,
  1639079: 100000217919567,
  1693180: 100000217919567,
  1712713: 100000217919567,
  1771492: 100000217919567,
  1783085: 100000217919567,
  1814725: 100000217919567,
  1814823: 100000217919567,
  1852084: 100000217919567,
  1910314: 100000217919567,
  1910485: 100000217919567,
  1967600: 100000217919567,
  2004368: 100000217919567,
  2013439: 100000217919567,
  2048851: 100000217919567,
  2081665: 100000217919567,
  2081803: 100000217919567,
  2092362: 100000217919567,
  2140335: 100000217919567,
  2152391: 100000217919567,
  2211613: 100000217919567,
  2242767: 100000217919567,
  2247293: 100000217919567,
  2261948: 100000217919567,
  2285583: 100000217919567,
  2295521: 100000217919567,
  2300441: 100000217919567,
  2314442: 100000217919567,
  2403792: 100000217919567,
  2425970: 100000217919567,
  2595653: 100000217919567,
  2640928: 100000217919567,
  2756237: 100000217919567,
  2818931: 100000217919567,
  2929998: 100000217919567},
 'week_end_date': {13136: Timestamp('2020-09-25 00:00:00'),
  36458: Timestamp('2020-09-18 00:00:00'),
  44911: Timestamp('2020-09-25 00:00:00'),
  46438: Timestamp('2020-09-18 00:00:00'),
  81365: Timestamp('2020-09-18 00:00:00'),
  85164: Timestamp('2020-09-18 00:00:00'),
  90500: Timestamp('2020-09-25 00:00:00'),
  90615: Timestamp('2020-09-25 00:00:00'),
  96797: Timestamp('2020-09-18 00:00:00'),
  117933: Timestamp('2020-09-25 00:00:00'),
  122622: Timestamp('2020-09-25 00:00:00'),
  134176: Timestamp('2020-09-18 00:00:00'),
  136793: Timestamp('2020-09-18 00:00:00'),
  141525: Timestamp('2020-09-18 00:00:00'),
  170583: Timestamp('2020-09-18 00:00:00'),
  173947: Timestamp('2020-09-18 00:00:00'),
  174717: Timestamp('2020-09-18 00:00:00'),
  202140: Timestamp('2020-09-18 00:00:00'),
  218028: Timestamp('2020-09-18 00:00:00'),
  246709: Timestamp('2020-09-18 00:00:00'),
  253509: Timestamp('2020-09-18 00:00:00'),
  296325: Timestamp('2020-09-18 00:00:00'),
  299911: Timestamp('2020-09-18 00:00:00'),
  305295: Timestamp('2020-09-25 00:00:00'),
  348334: Timestamp('2020-09-18 00:00:00'),
  377124: Timestamp('2020-09-25 00:00:00'),
  394816: Timestamp('2020-09-18 00:00:00'),
  442361: Timestamp('2020-09-25 00:00:00'),
  473015: Timestamp('2020-09-18 00:00:00'),
  568644: Timestamp('2020-09-25 00:00:00'),
  577591: Timestamp('2020-09-25 00:00:00'),
  580509: Timestamp('2020-09-18 00:00:00'),
  720516: Timestamp('2020-09-18 00:00:00'),
  745977: Timestamp('2020-09-18 00:00:00'),
  769787: Timestamp('2020-09-18 00:00:00'),
  778840: Timestamp('2020-09-18 00:00:00'),
  782353: Timestamp('2020-09-18 00:00:00'),
  810651: Timestamp('2020-09-18 00:00:00'),
  813219: Timestamp('2020-09-18 00:00:00'),
  826088: Timestamp('2020-09-18 00:00:00'),
  840808: Timestamp('2020-09-25 00:00:00'),
  841324: Timestamp('2020-09-18 00:00:00'),
  906253: Timestamp('2020-09-18 00:00:00'),
  909337: Timestamp('2020-09-18 00:00:00'),
  985510: Timestamp('2020-09-25 00:00:00'),
  1018408: Timestamp('2020-09-18 00:00:00'),
  1050752: Timestamp('2020-09-25 00:00:00'),
  1051113: Timestamp('2020-09-18 00:00:00'),
  1052263: Timestamp('2020-09-18 00:00:00'),
  1075794: Timestamp('2020-09-18 00:00:00'),
  1083932: Timestamp('2020-09-18 00:00:00'),
  1108915: Timestamp('2020-09-25 00:00:00'),
  1117019: Timestamp('2020-09-18 00:00:00'),
  1122138: Timestamp('2020-09-18 00:00:00'),
  1127150: Timestamp('2020-09-25 00:00:00'),
  1132493: Timestamp('2020-09-25 00:00:00'),
  1134987: Timestamp('2020-09-25 00:00:00'),
  1152049: Timestamp('2020-09-25 00:00:00'),
  1152106: Timestamp('2020-09-25 00:00:00'),
  1183398: Timestamp('2020-09-18 00:00:00'),
  1189886: Timestamp('2020-09-25 00:00:00'),
  1190308: Timestamp('2020-09-18 00:00:00'),
  1203364: Timestamp('2020-09-25 00:00:00'),
  1205628: Timestamp('2020-09-25 00:00:00'),
  1218831: Timestamp('2020-09-18 00:00:00'),
  1223462: Timestamp('2020-09-18 00:00:00'),
  1226553: Timestamp('2020-09-25 00:00:00'),
  1255579: Timestamp('2020-09-25 00:00:00'),
  1281205: Timestamp('2020-09-18 00:00:00'),
  1291587: Timestamp('2020-09-18 00:00:00'),
  1304344: Timestamp('2020-09-18 00:00:00'),
  1308887: Timestamp('2020-09-25 00:00:00'),
  1317417: Timestamp('2020-09-25 00:00:00'),
  1338837: Timestamp('2020-09-18 00:00:00'),
  1383861: Timestamp('2020-09-18 00:00:00'),
  1390182: Timestamp('2020-09-18 00:00:00'),
  1398967: Timestamp('2020-09-18 00:00:00'),
  1440998: Timestamp('2020-09-25 00:00:00'),
  1511552: Timestamp('2020-09-18 00:00:00'),
  1544349: Timestamp('2020-09-25 00:00:00'),
  1552965: Timestamp('2020-09-18 00:00:00'),
  1583477: Timestamp('2020-09-18 00:00:00'),
  1600032: Timestamp('2020-09-18 00:00:00'),
  1605280: Timestamp('2020-09-18 00:00:00'),
  1639079: Timestamp('2020-09-18 00:00:00'),
  1693180: Timestamp('2020-09-18 00:00:00'),
  1712713: Timestamp('2020-09-18 00:00:00'),
  1771492: Timestamp('2020-09-18 00:00:00'),
  1783085: Timestamp('2020-09-18 00:00:00'),
  1814725: Timestamp('2020-09-18 00:00:00'),
  1814823: Timestamp('2020-09-18 00:00:00'),
  1852084: Timestamp('2020-09-18 00:00:00'),
  1910314: Timestamp('2020-09-25 00:00:00'),
  1910485: Timestamp('2020-09-18 00:00:00'),
  1967600: Timestamp('2020-09-18 00:00:00'),
  2004368: Timestamp('2020-09-18 00:00:00'),
  2013439: Timestamp('2020-09-18 00:00:00'),
  2048851: Timestamp('2020-09-18 00:00:00'),
  2081665: Timestamp('2020-09-18 00:00:00'),
  2081803: Timestamp('2020-09-18 00:00:00'),
  2092362: Timestamp('2020-09-18 00:00:00'),
  2140335: Timestamp('2020-09-18 00:00:00'),
  2152391: Timestamp('2020-09-18 00:00:00'),
  2211613: Timestamp('2020-09-25 00:00:00'),
  2242767: Timestamp('2020-09-18 00:00:00'),
  2247293: Timestamp('2020-09-18 00:00:00'),
  2261948: Timestamp('2020-09-18 00:00:00'),
  2285583: Timestamp('2020-09-18 00:00:00'),
  2295521: Timestamp('2020-09-18 00:00:00'),
  2300441: Timestamp('2020-09-18 00:00:00'),
  2314442: Timestamp('2020-09-18 00:00:00'),
  2403792: Timestamp('2020-09-25 00:00:00'),
  2425970: Timestamp('2020-09-18 00:00:00'),
  2595653: Timestamp('2020-09-18 00:00:00'),
  2640928: Timestamp('2020-09-18 00:00:00'),
  2756237: Timestamp('2020-09-18 00:00:00'),
  2818931: Timestamp('2020-09-18 00:00:00'),
  2929998: Timestamp('2020-09-25 00:00:00')}}
 

Ответ №1:

Использовать pandas.unstack() и панды.Index.map

 table1.set_index(['week_end_date', 'actor_id']).index.map(table2.unstack())
 

Вывод

     actor_id week_end_date  score
1        11    14/01/2020   0.95
2        12    21/01/2020   0.56
3        13    14/01/2020   0.66
4        14    28/01/2020   0.45