熊猫功能帽子从其他数据框中打印列的值

时间:2018-09-24 21:34:58

标签: python pandas dataframe

一个新人在这里!我有一个看起来像这样的dp

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 :(得分:0)

您可以尝试进行自我加入:

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

它应该为您提供一个新列,其中父母的姓名映射到每个人,以及一堆额外的列,您可以根据需要将其过滤掉。

答案 1 :(得分:-1)

您的功能与我将如何实现此要求非常接近。方法:给定一个字符串,如果该字符串在列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