将df中的一列拆分为另一列值

2024-10-02 10:22:20 发布

您现在位置:Python中文网/ 问答频道 /正文

在python中,我有以下df(第一行中的标题):

FullName          FirstName
'MichaelJordan'   'Michael'
'KobeBryant'      'Kobe'
'LeBronJames'     'LeBron'  

我正试图根据“FirstName”中的值在“FullName”中分割每条记录,但运气不好

这就是我所尝试的:

df['Names'] = df['FullName'].str.split(df['FirstName'])

这会产生错误:

'Series' objects are mutable, thus they cannot be hashed

期望输出:

print(df['Names'])

['Michael', 'Jordan']
['Kobe', 'Bryant']
['LeBron', 'James']

Tags: 标题dfnames记录firstnamefullnamestrmichael
3条回答
>>> df.assign(names=[[firstname, fullname[len(firstname):]] 
                     for fullname, firstname in df[['FullName', 'FirstName']].values])
        FullName FirstName              names
0  MichaelJordan   Michael  [Michael, Jordan]
1     KobeBryant      Kobe     [Kobe, Bryant]
2    LeBronJames    LeBron    [LeBron, James]

str.replace

lastnames = [full.replace(first, '') for full, first in zip(df.FullName, df.FirstName)]
df.assign(LastName=lastnames)

        FullName FirstName LastName
0  MichaelJordan   Michael   Jordan
1     KobeBryant      Kobe   Bryant
2    LeBronJames    LeBron    James

同样的想法,但使用map

df.assign(LastName=[*map(lambda a, b: a.replace(b, ''), df.FullName, df.FirstName)])

        FullName FirstName LastName
0  MichaelJordan   Michael   Jordan
1     KobeBryant      Kobe   Bryant
2    LeBronJames    LeBron    James

由于您正在进行行操作,因此我们可以使用apply

其思想是将名字替换为self+逗号分隔

df["SplitName"] = df.apply(
    lambda x: x["FullName"].replace(x["FirstName"], f"{x['FirstName']}, "), axis=1
)


print(df['SplitName'].str.split(',',expand=True))

         0        1
0  Michael   Jordan
1     Kobe   Bryant
2   LeBron    James

相关问题 更多 >

    热门问题