在Pandas DataFrame中按指定规则生成Unique ID的技术需求
解决Pandas DataFrame的Unique ID分配需求
需求说明
现有如下Pandas DataFrame:
GID Similarity Score 0 71 100 1 71 100 2 132 100 3 132 40 4 132 100 5 132 40 6 104 35 7 104 35 8 112 0 9 114 0
需要新增名为Unique ID(示例中显示为UID)的列,分配规则:
- 当
GID相同且Similarity Score为100时,分配相同的Unique ID - 其余所有情况,每行分配不同的Unique ID
期望输出:
GID Similarity Score UID 0 71 100 900 1 71 100 900 2 132 100 901 3 132 40 902 4 132 100 901 5 132 40 903 6 104 35 904 7 104 35 905 8 112 0 906 9 114 0 907
解决方案代码
import pandas as pd # 构造示例DataFrame(已有真实数据可跳过此步) data = { 'GID': [71, 71, 132, 132, 132, 132, 104, 104, 112, 114], 'Similarity Score': [100, 100, 100, 40, 100, 40, 35, 35, 0, 0] } df = pd.DataFrame(data) # 1. 为符合条件的行分配统一ID mask = df['Similarity Score'] == 100 df.loc[mask, 'UID'] = df[mask].groupby('GID').ngroup() + 900 # 900为起始ID值 # 2. 为其余行分配唯一递增ID max_assigned_uid = df['UID'].max() if not df['UID'].isna().all() else 899 non_qualified_rows = ~mask df.loc[non_qualified_rows, 'UID'] = range(max_assigned_uid + 1, max_assigned_uid + 1 + len(df[non_qualified_rows])) # 转换为整数类型,确保格式统一 df['UID'] = df['UID'].astype(int) # 查看结果 print(df)
代码逻辑说明
- 符合条件的行处理:先筛选出
Similarity Score为100的行,按GID分组后用ngroup()生成组序号,加上起始值900,保证同一GID的100分行拥有相同UID。 - 其余行处理:计算已分配的最大UID,从下一个整数开始为每一行分配连续递增的唯一ID,确保这些行的UID不重复且与前面的组ID不冲突。
- 类型转换:将UID列转为整数,避免出现浮点类型的ID值。
内容的提问来源于stack exchange,提问作者Sonakshi
相关产品推荐
相关产品推荐

