在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']
答案 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)