如何在Pandas DataFrame中对分组后的子组进行Label Encoding
在Pandas DataFrame中对分组子组执行标签编码
需求说明
针对DataFrame的Category列分组,在每个分组内对Name列执行标签编码:同一分组内不同Name对应唯一连续标签(从1开始),相同Name标签一致。
示例输入
| Category | Name |
|---|---|
| FRUITS | Apple |
| FRUITS | Orange |
| FRUITS | Apple |
| Vegetables | Onion |
| Vegetables | Garlic |
| Vegetables | Garlic |
示例输出
| Category | Name | Label |
|---|---|---|
| FRUITS | Apple | 1 |
| FRUITS | Orange | 2 |
| FRUITS | Apple | 1 |
| Vegetables | Onion | 1 |
| Vegetables | Garlic | 2 |
| Vegetables | Garlic | 2 |
解决方案
直接使用Pandas的groupby结合factorize方法即可实现,代码如下:
import pandas as pd # 构造示例数据 df = pd.DataFrame({ 'Category': ['FRUITS', 'FRUITS', 'FRUITS', 'Vegetables', 'Vegetables', 'Vegetables'], 'Name': ['Apple', 'Orange', 'Apple', 'Onion', 'Garlic', 'Garlic'] }) # 分组后对Name列生成从1开始的连续标签 df['Label'] = df.groupby('Category')['Name'].transform(lambda x: x.factorize()[0] + 1) print(df)
代码解释
groupby('Category'):按Category字段拆分数据,生成独立的子组transform(lambda x: x.factorize()[0] + 1):对每个子组的Name列执行factorize,该方法会将唯一值映射为从0开始的整数标签;加1是为了让标签从1开始计数;transform方法保证编码结果能和原DataFrame的行对齐,保留原数据结构不变
内容的提问来源于stack exchange,提问作者rohit deraj
相关产品推荐
相关产品推荐

