Python DataFrame中创建IMEI与IMSI配对索引的实现方法咨询
实现方案
核心逻辑说明
你现有代码仅统计了IMEI的出现次数,丢失了原始的IMEI与IMSI配对明细,需要先保留原始记录再生成两类索引:
- 索引A:先按IMEI对应的出现次数降序排序后,给每个唯一IMEI分配从1开始的连续序号
- 索引B:在同一个IMEI分组内,按原始数据中IMSI的出现顺序,分配从1开始的连续序号
完整可运行代码
import pandas as pd import numpy as np # 1. 读取原始数据,保留所有IMEI、IMSI配对明细(注意read_csv有下划线) df_raw = pd.read_csv('file.csv', usecols=['Imei', 'Imsi']) # 2. 统计每个IMEI的出现次数,生成索引A df_imei_stat = df_raw.groupby('Imei', as_index=False)['Imsi'].count()\ .rename(columns={'Imsi': 'Occurences'})\ .sort_values(by='Occurences', ascending=False)\ .reset_index(drop=True) # 按排序后的顺序给IMEI分配A索引,从1开始 df_imei_stat['A'] = df_imei_stat.index + 1 # 3. 把A索引关联回原始明细数据 df_result = df_raw.merge(df_imei_stat[['Imei', 'A', 'Occurences']], on='Imei', how='left') # 4. 生成索引B:同一个IMEI(即同一个A值)下按出现顺序编号,从1开始 df_result['B'] = df_result.groupby('A').cumcount() + 1 # 可选:按A、B排序得到规整的展示效果 df_result = df_result.sort_values(by=['A', 'B']).reset_index(drop=True) # 输出查看结果 print(df_result)
可选优化
如果同一个IMEI下重复出现的相同IMSI不需要重复编号,可在读取原始数据后先执行去重:
df_raw = df_raw.drop_duplicates(subset=['Imei', 'Imsi'], keep='first').reset_index(drop=True)
内容的提问来源于stack exchange,提问作者Gaurav Raina
相关产品推荐
相关产品推荐

