Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于类似字符串创建ID_Python_Pandas - Fatal编程技术网

Python 基于类似字符串创建ID

Python 基于类似字符串创建ID,python,pandas,Python,Pandas,我有一个非常丑陋的数据集,它有一列随机的单词和名字。这些名字有些相似,有些则不同。现在,我想做的是创建一个新列,如果它在另一行中包含一个值,那么该列将为每个名称分配一个ID。不过,稍后我将不得不研究单词的实际相似性,而不仅仅是相同的值 因此,鉴于: Names 0 James 1 James 2 2 Bike 3 Bicycle 4 James

我有一个非常丑陋的数据集,它有一列随机的单词和名字。这些名字有些相似,有些则不同。现在,我想做的是创建一个新列,如果它在另一行中包含一个值,那么该列将为每个名称分配一个ID。不过,稍后我将不得不研究单词的实际相似性,而不仅仅是相同的值

因此,鉴于:

     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
匹配呢?