如何删除DataFrame中包含重复值的行 附实操案例
按指定列删除DataFrame重复行的解决方案
你要实现按S.No列去重,直接调用pandas内置的drop_duplicates方法即可,比自己写循环处理效率更高,也不会破坏你原有迭代插入数据库的逻辑。
具体实现
1. 单独去重代码
如果你只需要删掉重复的S.No行,保留其中一条,用下面的代码就行:
# 按S.No列判断重复,保留第一次出现的行,返回去重后的新DataFrame df = df.drop_duplicates(subset='S.No', keep='first')
如果你要保留最后一次出现的S.No=10的那条记录,把keep参数改成keep='last'即可。
2. 结合你现有逻辑的完整代码
你可以先完成去重,再跑你原来的迭代逻辑,调整后的代码如下:
from datetime import datetime import pandas as pd # 第一步:先按S.No列去重 df = df.drop_duplicates(subset='S.No', keep='first') n = 2 while n <= len(df): df1 = df.tail(n) cond = df.Column1 < df.Column2 df.loc[cond, ['Column1', 'Column2']] = df.loc[cond, ['Column2', 'Column1']].values print(df1) df2 = df1.to_dict("records") db_cm.insert_one({"data": df2, "time stamp": datetime.now()}) df.drop(df1.index ,inplace=True) n = n + 1 else: print(df.tail(n))
参数说明
subset:用来判断重复的参考列,这里填'S.No'就仅判断该列的值是否重复keep:重复时的保留规则,first保留首次出现的行,last保留最后出现的行,填False会直接删除所有重复行inplace:是否直接修改原DataFrame,默认值为False,会返回新的去重后对象
内容的提问来源于stack exchange,提问作者surendra suri
相关产品推荐
相关产品推荐

