需求:对131万条数据去重。
去重规则:同一个号码多条记录,保留有“升降档标志”为1的且操作时间最晚的那一条,如果多条记录的“升降档标志”都不为1,则保留操作时间最晚的一条。
我的解决思路是用for循环,代码如下,运行了一下午还没结束,不知道有没有更高效的方法?
求解答
# 1、对原数据按照操作时间倒排序(data_07表示原数据)
data_07_sorted = data_07.sort_values(by=['操作时间'], ascending=False)
# 2、建立一个空Dataframe存储筛选后的数据集,并插入第一条排序后的原数据
columns = data_07_sorted.columns.values.tolist()
data_07_pure = pd.DataFrame(columns=columns)
data_07_pure = data_07_pure.append(data_07_sorted.iloc[0,:])
# 3、按照筛选逻辑进行for循环遍历
data_07_pure = data_07_pure.append(data_07_sorted.iloc[0,:])
for i in range(len(data_07_sorted)):
if data_07_sorted.iloc[i,0].tolist() in data_07_pure['号码'].tolist():
tel = data_07_sorted.iloc[i,0].tolist()
data_07_pure_tel = data_07_pure[data_07_pure['号码'] == tel]
if data_07_pure_tel['升降档标志'].tolist()[0] in [1,]:
continue
elif data_07_sorted.iloc[i,:]['升降档标志'].tolist() in [1,]:
data_07_pure.drop(index=data_07_pure_tel.index, inplace=True)
data_07_pure = data_07_pure.append(data_07_sorted.iloc[i,:])
else:
data_07_pure = data_07_pure.append(data_07_sorted.iloc[i,:])
原数据长这样: