Объединить два кадра данных в столбце списков - PullRequest
2 голосов
/ 13 июня 2019

У меня есть два кадра данных.

df = pd.DataFrame([[1,2,3,[4,5]],[6,7,8,[9,10]]], columns=['a','b','c','d'])

df2 = pd.DataFrame([[4,'abc'],[5,'ef'], [10,'g'], [12,'hijk']], columns=['a_2','b_2'])

In [151]: df
Out[151]: 
   a  b  c        d
0  1  2  3   [4, 5]
1  6  7  8  [9, 10]

In [152]: df2
Out[152]: 
   a_2   b_2
0    4   abc
1    5    ef
2   10     g
3   12  hijk

Я хочу объединить два на основе столбца 'd' в df и получить следующий вывод:

df3 = pd.DataFrame([[1,2,3,[4,5],['abc','ef']],[6,7,8,[9,10],['g']]], columns=['a','b','c','d','b_2'])


In [153]: df3
Out[153]: 
   a  b  c        d        b_2
0  1  2  3   [4, 5]  [abc, ef]
1  6  7  8  [9, 10]        [g]

Я попытался слить, но я не получаютребуемые результаты.

1 Ответ

2 голосов
/ 13 июня 2019

Это не совсем проблема слияния, но я бы сделал это, используя понимание списка , которое вызывает Series.get:

s = df2.set_index('a_2')['b_2']  # mapping to use
[[s.get(y) for y in x if y in s] for x in df['d']]
# [['abc', 'ef'], ['g']]

# df['b_2'] = [[s.get(y) for y in x if y in s] for x in df['d']]
df3 = df.assign(b_2=[[s.get(y) for y in x if y in s] for x in df['d']])
df3

   a  b  c        d        b_2
0  1  2  3   [4, 5]  [abc, ef]
1  6  7  8  [9, 10]        [g]

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...