Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.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,我有一个熊猫数据框,看起来像这样: ner_id art_id ner 0 0 emmanuel macron 1 0 paris 2 0 france 3 1 paris 4 0 france 我想更改“ner_id”列 例如,paris以id 0和1出现在文章中参见art_id列 我只想更改列ner_id,并为paris提供唯一的id,而不是其他id 我希望每次在列中重复一个单

我有一个熊猫数据框,看起来像这样:

ner_id  art_id  ner
0       0      emmanuel macron
1       0      paris
2       0      france
3       1      paris
4       0      france
我想更改“ner_id”列

例如,paris以id 0和1出现在文章中参见art_id列

我只想更改列ner_id,并为paris提供唯一的id,而不是其他id

我希望每次在列中重复一个单词时都在列中执行此操作,并为重复的单词指定相同的id

我怎么做

预期产出:

ner_id  art_id  ner
    0       0      emmanuel macron
    1       0      paris
    2       0      france
    1       1      paris
    2       0      france

每次在下一行中重复一个术语时,我都会给出该术语的第一个id。

我将在下面给出答案。这将为同一个单词提供相同的ID

df = pd.DataFrame({'ner':['emmanuel macron', 'paris', 'france', 'paris', 'france']})

df['ner_id'] = df.groupby('ner').ngroup()

df

我会给你一个答案。这将为同一个单词提供相同的ID

df = pd.DataFrame({'ner':['emmanuel macron', 'paris', 'france', 'paris', 'france']})

df['ner_id'] = df.groupby('ner').ngroup()

df
使用-

时间安排

解决方案-

2.12 ms ± 419 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
这个-

460 µs ± 45.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
使用-

时间安排

解决方案-

2.12 ms ± 419 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
这个-

460 µs ± 45.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

ner_id已经是唯一的。我想你想要的是按ner分组,并按这些组分配ID。如果您的数据帧名为df,您可以尝试使用df['ner_id']=df.groupby'ner.ngroup@PaulH我更新了我的帖子为什么不能将ner列本身作为唯一标识符?我已在下面的解决方案中包含了我的注释。如果你能解释为什么它不适合你,我可以更新它。ner_id已经是唯一的了。我想你想要的是按ner分组,并按这些组分配ID。如果您的数据帧名为df,您可以尝试使用df['ner_id']=df.groupby'ner.ngroup@PaulH我更新了我的帖子为什么不能将ner列本身作为唯一标识符?我已在下面的解决方案中包含了我的注释。如果你能解释为什么它对你不起作用,我可以更新它。非常感谢我将尝试我的大数据框架非常感谢我将尝试我的大数据框架非常感谢@Vivek Kalyanarangan它也起作用。没有人知道pd.factorize。谢谢你的提示。应该是这种情况下的首选解决方案。非常感谢@Vivek Kalyanarangan它也能工作。任何人都不知道pd.factorize。谢谢你的提示。应该是此场景中的首选解决方案。