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
- 对那些
s1、1、2、2、3等进行排序(IntentID
)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