Я пытаюсь сделать left outer join
для двух Data.Frames, используя Python. Цель состоит в том, чтобы получить столбец справа налево, основываясь на том, существует ли слева в списке ключ слева.
Сначала я решил использовать Pandas, поэтому я написал что-то вроде этого:
import pandas as pd
left = pd.DataFrame({'name':['spam', 'ham', 'eggs'], 'leftkey':[11, 22, 33]})
right = pd.DataFrame({'var':['foo', 'bar'], 'rightkey':[[1, 2, 5], [2, 33, 100]]})
merged = pandas.merge(left, right, left_on='keyleft', right_on='keyright', how='left')
Как мы видим, left_on
- это одна переменная, а right_on
- это list
.
Я бы ожидал, что merged
будет выглядеть примерно так:
| | name | leftkey | var | rightkey |
|---|------|---------|-----|------------|
| 0 | spam | 11 | NaN | NaN |
| 1 | ham | 22 | NaN | NaN |
| 2 | eggs | 33 | bar | [2,33,100] |
Однако все var
и rightkey
в конечном итоге становятся NaN
.
Я понимаю, что могу просто поместить все в R и сделать это. Возможно, я обдумываю вещи, и это даже не требует Pandas. Однако я надеюсь сохранить конвейер в Python как можно дольше.
Есть предложения?