用另一个列值拆分df中的列

时间:2020-02-21 20:31:02

标签: python pandas

在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']

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:3)

由于您要进行逐行操作,我们可以使用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

答案 2 :(得分:3)

   col1  col2  col3  col4
0     1   NaN   NaN   1.0
1     2   3.0   NaN   2.0
2     4   NaN   5.0   4.0
3     6   8.0   NaN   9.0

答案 3 :(得分:0)

这是一个有申请的班轮。将function saveangebotdetailfunc(url, GewerkFertig1, AngebotnrFertig1, PreisFertig1, WerkvertragID1, DatumFertig1, is){ $.ajax({ type: 'POST', url: url, data: { csrfmiddlewaretoken: '{{ csrf_token }}', GewerkAngebotF: GewerkFertig1, AngebotsnrF: AngebotnrFertig1, AngebotspreisF: PreisFertig1, WerkvertragidF: WerkvertragID1, AngebotsdatumF: DatumFertig1, }, dataType: "text", success: function (data) { forAngebotArrayFertig(is); }, error: function () { }, }) } function forAngebotArrayFertig(is) { if (is < AngebotArrayFertig.length) { GewerkFertig = AngebotArrayFertig[is][0] AngebotnrFertig = AngebotArrayFertig[is][1] PreisFertig = AngebotArrayFertig[is][3] DatumFertig = AngebotArrayFertig[is][2] var DatumFertig = DatumFertig.split(".").reverse().join("-"); //Wandelt Datum in PythonForm um das Backend es verarbeiten kann saveangebotdetailfunc("/saveangebotdetail/", GewerkFertig, AngebotnrFertig, PreisFertig, WerkvertragID, DatumFertig, (is + 1)) if (is == AngebotArrayFertig.length){ AngeboteSaveAbgeschlossen = 1 } } } forAngebotArrayFertig(0); 的长度切成FullName

FirstName
df['Names'] = df.apply(lambda row: [row['FullName'][:len(row['FirstName'])], row['FullName'][len(row['FirstName']):]] if row['FullName'].startswith(row['FirstName']) else '', axis=1)