基于首行ID值为重复记录生成Key列的技术需求
为重复记录生成组首行ID作为Key列
依据Name和State字段判定重复记录,为每组重复记录新增Key列,Key值取对应组的首行ID值。
原始数据表
| ID | Name | State |
|---|---|---|
| 1001 | Alex | CA |
| 1002 | Alex | CA |
| 1003 | Smith | WV |
| 1004 | Smith | WV |
期望结果表
| Key | ID | Name | State |
|---|---|---|---|
| 1001 | 1001 | Alex | CA |
| 1001 | 1002 | Alex | CA |
| 1003 | 1003 | Smith | WV |
| 1003 | 1004 | Smith | WV |
解决方案
1. SQL实现
方法一:用MIN()函数(适用于ID递增场景)
通过窗口函数按Name和State分组,取组内最小ID作为Key:
SELECT MIN(ID) OVER (PARTITION BY Name, State) AS Key, ID, Name, State FROM your_table;
方法二:用FIRST_VALUE()函数(严格取组内首行ID)
若ID无递增规则,需保留原始顺序取首行ID,可指定排序规则:
SELECT FIRST_VALUE(ID) OVER (PARTITION BY Name, State ORDER BY ID) AS Key, ID, Name, State FROM your_table;
2. Python Pandas实现
import pandas as pd # 构建原始数据 df = pd.DataFrame({ 'ID': [1001, 1002, 1003, 1004], 'Name': ['Alex', 'Alex', 'Smith', 'Smith'], 'State': ['CA', 'CA', 'WV', 'WV'] }) # 按分组取首行ID生成Key列 df['Key'] = df.groupby(['Name', 'State'])['ID'].transform('first') # 调整列顺序匹配期望结果 df = df[['Key', 'ID', 'Name', 'State']]
3. Excel实现
- 先对数据排序:选中数据区域,点击「数据」→「排序」,依次按
Name、State、ID升序排列,确保每组首行为最小ID; - 在空白列(如D列)输入公式,D2单元格:
=IF(AND(B2=B1,C2=C1),D1,A2) - 下拉填充公式,最后将D列重命名为
Key并调整列顺序即可。
内容的提问来源于stack exchange,提问作者kumar
相关产品推荐
相关产品推荐

