一个新人在这里!我有一个看起来像这样的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
我知道它的编码效果很差,但是我也不明白为什么它不起作用并且没有在互联网上看到我需要的东西。
答案 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