从其他系列对象修改系列

时间:2019-02-12 16:01:04

标签: python pandas

所以我有这样的数据:

Id  Title                   Fname   lname   email
1   meeting with Jay, Aj    Jay     kay     jk@something.com
1   meeting with Jay, Aj    Aj      xyz     aj@something.com
2   call with Steve         Steve   Jack    st@something.com
2   call with Steve         Harvey  Ray     h@something.com
3   lunch Mike              Mil     Mike    m@something.com

我想从“标题”中删除每个唯一ID的名字和姓氏。 我尝试按ID进行分组,从而为标题,Fname,Lname等提供了一系列对象

df.groupby('Id')

我已将Fname与.agg(lambda x: x.sum() if x.dtype == 'float64' else ','.join(x))串联

&保留在concated数据框中。

同样,所有其他列也被汇总。问题是如何根据此汇总系列替换“标题”中的值。

concated['newTitle']  = [ concated.Title.str.replace(e[0]).replace(e[1]).replace(e[1])
                     for e in
                     zip(concated.FName.str.split(','), concated.LName.str.split(','))
                     ]

我想要类似这样的方法,或者通过其他方式,对于每个ID,我都可以获取带有替换值的newTitle。

输出如下:

Id Title
1  Meeting with ,
2  call with 
3  lunch 

1 个答案:

答案 0 :(得分:3)

通过连接Fname和lname并替换来创建映射器系列,

s = df.groupby('Id')[['Fname', 'lname']].apply(lambda x: '|'.join(x.stack()))
df.set_index('Id')['Title'].replace(s, '', regex = True).drop_duplicates()


Id
1    meeting with , 
2         call with 
3             lunch