如何基于DataFrame中坐标列的重复值创建分组ID列?
为重复坐标点生成分组ID列
问题描述
现有如下结构的DataFrame:
| BX | BY |
|---|---|
| 4.1 | 12.4 |
| 4.1 | 12.4 |
| 4.1 | 12.4 |
| 10.0 | 14.5 |
| 10.0 | 14.5 |
| 9.7 | 5.6 |
需要完成两个操作:
- 将
BX和BY的数值截断为整数(如4.1→4,12.4→12) - 新增
ID列,给横纵坐标完全相同的行分配同一个分组标识,最终结果如下:
| BX | BY | ID |
|---|---|---|
| 4 | 12 | 1 |
| 4 | 12 | 1 |
| 4 | 12 | 1 |
| 10 | 14 | 2 |
| 10 | 14 | 2 |
| 9 | 5 | 3 |
解决方案
使用pandas可以快速实现需求,步骤如下:
1. 导入库并创建原始DataFrame
import pandas as pd # 构造原始数据 data = { 'BX': [4.1, 4.1, 4.1, 10.0, 10.0, 9.7], 'BY': [12.4, 12.4, 12.4, 14.5, 14.5, 5.6] } df = pd.DataFrame(data)
2. 截断坐标为整数
通过astype(int)直接提取数值的整数部分(截断小数,而非四舍五入):
df['BX'] = df['BX'].astype(int) df['BY'] = df['BY'].astype(int)
3. 生成分组ID
有两种简洁的方法生成ID:
方法一:使用groupby.ngroup()
通过分组后获取组的索引,加1让ID从1开始:
df['ID'] = df.groupby(['BX', 'BY']).ngroup() + 1
方法二:使用pd.factorize()
将坐标组合为元组后,用factorize生成唯一标识:
df['ID'] = pd.factorize(df[['BX', 'BY']].apply(tuple, axis=1))[0] + 1
执行完成后,你的DataFrame就会变成目标格式。
内容的提问来源于stack exchange,提问作者starski
相关产品推荐
相关产品推荐

