Python 如何在pandas中为列中的唯一值创建行?

Python 如何在pandas中为列中的唯一值创建行?,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个包含数千行的熊猫数据框,如下所示: IntentID IntentName Query Response 1 Intent Name 1 Query 1 Response1 2 Intent Name 1 Query 1 Response2 3 Intent Name 2 Query 2 Respons

我有一个包含数千行的熊猫数据框,如下所示:

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
最简单的方法是什么?

试试以下方法:

df['IntentID'] = df.groupby('IntentName') \
                    ['IntentID'].transform('first') \
                    .rank(method='dense') \
                    .astype('int')
工作原理:

  • IntentName
  • 对于每组,保留第一个
    IntentID
  • 对那些
    IntentID
    s1、1、2、2、3等进行排序(
    method=densed
  • 将列组转换为int
您可以使用正则表达式:

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