Функция Pandas выводит значение столбца из другого кадра данных - PullRequest
0 голосов
/ 25 сентября 2018

Новичок здесь!У меня есть df, который выглядит так

key1 	parentID 	fullname 	ssn 	birthdate
0 	1 	19 	Verlie Bailey 	496-35-2171 	Fri-2011-06-10-17:28:19
1 	2 	10 	Bernarda Tippett 	532-36-2171 	Sun-2016-05-29-11:47:28
2 	3 	27 	Cecelia Hartnett 	532-24-8961 	Wed-2010-06-02-00:34:02
3 	4 	4 	Kristin Hobbs 	661-99-7959 	Thu-2011-01-13-01:47:54
4 	5 	16 	Enriqueta Jolley 	661-35-9909 	Wed-2010-09-29-08:44:12
5 	6 	40 	Teresa Devine 	125-97-2946 	Sun-2015-12-27-16:39:14
6 	7 	15 	Graham Deloach 	661-36-1624 	Sat-2012-07-21-12:04:41
7 	8 	48 	Randolph Lasalle 	893-36-8961 	Sat-2012-12-01-15:23:08
8 	9 	4 	Catharine Hobbs 	323-36-8852 	Sun-2014-03-09-09:02:52
9 	10 	37 	Elnora Shippee 	125-35-2998 	Sat-2012-03-31-23:25:16
10 	11 	26 	Latoya Purvis 	532-97-9974 	Mon-2012-07-09-17:01:17

И мне нужно создать функцию, которая печатает имя родителя, когда я даю ему чье-то полное имя.Я ожидаю, что f('Catharine Hobbs') напечатает Kristin.

Я пробовал это, но ни один из них не работал:

    parentId = 0
    for line in family:
        if line[2] == fullname:
            parentId = line[1]
    for line in employee:
        if line[1] == parentId:
            return line[2].split(' ')[0]

def f(x):
    parent = 0
    for i in family.fullname:
        if i == x:
            parent = family.parentID
        return parent

Я знаю, что это плохое кодирование, но я также не понимаю, почему это не работает, и не видел ничего похожего на то, что мне нужно в Интернете.

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Вы можете попробовать выполнить самостоятельное объединение:

pd.merge(df, df[['key1', 'fullname']], left_on='parentID', right_on='key1', how='left')

Он должен дать вам новый столбец с именами родителей, сопоставленными каждому человеку, вместе с кучей дополнительных столбцов, которые вы можете отфильтровать каксогласно вашим требованиям.

0 голосов
/ 25 сентября 2018

Ваши функции довольно близки к тому, как я подхожу к этому требованию.Подход: при заданной строке, если эта строка появляется хотя бы один раз в столбце fullname, возвращает первую часть строки, разделенную пробелом.

def get_first_name(fullname):
    if fullname in df['fullname'].values:
        return fullname.split(' ')[0]

get_first_name('Verlie Bailey')
# 'Verlie'

get_first_name('Catharine Hobbs')
# 'Catharine'

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