我有一个数据框架,其中一列同时包含姓和名。我需要以某种方式创建另一个列,它将名称连接起来,如下所示:
约翰·史密斯 ---------------------------------& gt;smithjo01
基本上是他们姓氏的前五个字母和他们名字的前两个字母在一起。然后给他们一个以01开头的数字。如果他们是第二个有相同名字的人,他们被赋予02,以此类推。
同样,如果他们的姓只有四个或更少的字母,他们包括所有可能的字母,并像平常一样使用名字。例如:
彼得·潘 ---------------------------------& gt;panpe01
任何想法?
完整代码
import pandas as pd
data = ({
'Name': ["John Smith", "Peter Pan", "John Smith", "Peter Pan", "John Smith", "Peter Pan", "John Smith", "Peter Pan", "John Smith", "Peter Pan",],
})
# Converting data to dataframe
df = pd.DataFrame(data)
df[['FirstName', 'LastName']] = df.Name.str.split(expand=True)
# Combining Last name and 2 leters of First name
df["UID"] = df["LastName"].astype(
str).str.lower()+df["FirstName"].astype(str).str.lower().str[:2]
df["UID"] = df["UID"] +
df.groupby('UID').cumcount().add(1).astype(str).str.zfill(
2)
print(df)
Name FirstName LastName UID
0 John Smith John Smith smithjo01
1 Peter Pan Peter Pan panpe01
2 John Smith John Smith smithjo02
3 Peter Pan Peter Pan panpe02
4 John Smith John Smith smithjo03
5 Peter Pan Peter Pan panpe03
6 John Smith John Smith smithjo04
7 Peter Pan Peter Pan panpe04
8 John Smith John Smith smithjo05
9 Peter Pan Peter Pan panpe05
希望这对你有帮助。快乐编码:)