Python 基于类似字符串创建ID
我有一个非常丑陋的数据集,它有一列随机的单词和名字。这些名字有些相似,有些则不同。现在,我想做的是创建一个新列,如果它在另一行中包含一个值,那么该列将为每个名称分配一个ID。不过,稍后我将不得不研究单词的实际相似性,而不仅仅是相同的值 因此,鉴于:Python 基于类似字符串创建ID,python,pandas,Python,Pandas,我有一个非常丑陋的数据集,它有一列随机的单词和名字。这些名字有些相似,有些则不同。现在,我想做的是创建一个新列,如果它在另一行中包含一个值,那么该列将为每个名称分配一个ID。不过,稍后我将不得不研究单词的实际相似性,而不仅仅是相同的值 因此,鉴于: Names 0 James 1 James 2 2 Bike 3 Bicycle 4 James
Names
0 James
1 James 2
2 Bike
3 Bicycle
4 James Marsh
5 Ants
6 Job
7 Michael
8 Arm
9 Mike K
10 Michael k
新列ID
将为每个相似的值分配相同的编号,以便对所有相似的值进行分组,并且可能包含1到n个名称的每个组将具有唯一的ID。因此,输出将为:
Names ID
0 James 1
1 James 2 1 #James 2 contains James, so it would be counted in the same group
2 Bike 2 #The similarity between this and Bicycle can be ignored for now
3 Bicycle 3
4 James Marsh 1 #Contains James so it's in the same group
5 Ants 4
6 Job 5
7 Michael 6
8 Arm 7
9 Mike K 8 #The similarity between this and Michael can be ignored for now
10 Michael k 6
我确信有一种方法可以用df.apply()
做到这一点,我只是不确定是什么。这基本上是分解
的第一个词:
df['ID'] = df.Names.str.extract('^(\S+)')[0].factorize()[0] + 1
输出:
Names ID
0 James 1
1 James 2 1
2 Bike 2
3 Bicycle 3
4 James Marsh 1
5 Ants 4
6 Job 5
7 Michael 6
8 Arm 7
9 Mike K 8
10 Michael k 6
注意:这与Jame
和James
不匹配这似乎是groupby
的工作,使用一个表示相似性逻辑的键。例如,Names.split()[0]
将涵盖到目前为止所显示的内容。那么如何将Jame
与James
匹配呢?