如何在熊猫列中为唯一值创建行?

时间:2019-12-03 02:14:40

标签: python pandas dataframe

我有一个带有数千行的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

最简单的方法是什么?

2 个答案:

答案 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
  • 将等级转换为int

答案 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