我有一个带有数千行的pandas数据框,如下所示:
IntentID IntentName Query Response
1 Intent Name 1 Query 1 Response1
2 Intent Name 1 Query 1 Response2
3 Intent Name 2 Query 2 Response3
4 Intent Name 2 Query 2 Response4
5 Intent Name 3 Query 3 Response5
我需要“ IntentName”中的所有唯一值都具有相同的IntentID值,例如:
IntentID IntentName Query Response
1 Intent Name 1 Query 1 Response1
1 Intent Name 1 Query 1 Response2
2 Intent Name 2 Query 2 Response3
2 Intent Name 2 Query 2 Response4
3 Intent Name 3 Query 3 Response5
最简单的方法是什么?
答案 0 :(得分:2)
尝试一下:
df['IntentID'] = df.groupby('IntentName') \
['IntentID'].transform('first') \
.rank(method='dense') \
.astype('int')
工作原理:
IntentName
IntentID
IntentID
的1、1、2、2、3等(method=dense
)答案 1 :(得分:1)
您可以使用正则表达式:
df['IntentID'] = df.IntentName.apply(lambda x: re.search('(?P<num>\d+)',x).groups()[0])
输出
IntentID IntentName Query Response
0 1 Intent Name 1 Query 1 Response1
1 1 Intent Name 1 Query 1 Response2
2 2 Intent Name 2 Query 2 Response3
3 2 Intent Name 2 Query 2 Response4
4 3 Intent Name 3 Query 3 Response5