Объедините два столбца, содержащие списки имен и фамилий, в один столбец со списком полных имен. - PullRequest
0 голосов
/ 28 мая 2020

В моем фрейме данных много столбцов. Два из них - это first и last, которые содержат списки имен и фамилий соответственно. Некоторые имена отсутствуют и вместо них есть пустые строки. Но первый элемент в списке first совпадает с первым элементом в списке last.

     first                                         last
0    ['john','alex','james','mike','sarah']        ['smith','','connor','michaels','fort']  
1    ['stephen','', 'brittany', 'mandy']           ['chambers','ronalds','','moore']
2    ['guy', 'alec', 'tyrone', 'joe','','amy']     ['lafluer','baldwin','james','montana','','adams']

Я хочу объединить эти списки в один столбец, чтобы получить столбец name, который содержит список как имени, так и фамилии. Итак, в этом примере результат будет:

     name                                         
0    ['john smith','alex ','james ','mike michaels','sarah fort']  
1    ['stephen chambers',' ronalds', 'brittany ', 'mandy moore']
2    ['guy lafluer', 'alec baldwin', 'tyrone james', 'joe montana',' ','amy adams']

Объединение двух строковых столбцов в pandas легко, с df['col3'] = df['col1'] + df['col2'], но я не уверен, как это сделать и собрать два списка вместе в этом путь.

Ответы [ 3 ]

2 голосов
/ 28 мая 2020
def combiner(l1, l2):
   return [' '.join(x) for x in zip(l1, l2)]


df["name"]=df.apply(lambda x: combiner(x["first"], x["last"]), axis=1)
1 голос
/ 28 мая 2020

Вы можете использовать zip с list comprehension:

df['name'] = df.apply(lambda x: [m + ' ' + n for m,n in zip(x['first'], x['last'])], 1)

ИЛИ

df['name'] = df.apply(lambda x: [' '.join(x) for x in zip(x['first'],x['last'])], 1)
0 голосов
/ 28 мая 2020

попробую с двумя по l oop

l=[[f +' '+ l for f,l in zip(x,y)] for x, y  in zip(df['first'],df['last'])]
Out[508]: 
[['john smith', 'alex ', 'james connor', 'mike michaels', 'sarah fort'],
 ['stephen chambers', ' ronalds', 'brittany ', 'mandy moore'],
 ['guy lafluer',
  'alec baldwin',
  'tyrone james',
  'joe montana',
  ' ',
  'amy adams']]

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