Pandas根据差值条件构造辅助列对几十万数据去重处理
2019-04-04 00:07
218 查看
最近碰到这样的一个问题:有一对数据t1列,t2列(如下图所示),用pandas读入,这些数据中会存在一个问题:①某一行的t1列值与另一行的t1列值相等,但t2列值的差值小于0.0001;②某一行的t2列值与另一行的t2列值相等,但t1列值的差值小于0.0001。我认为这两种情况是属于重合冗余情况(因为其他数据差别都大于0.0002),想要对数据进行去重,数据量有几十万条。
一开始想要不要用循环遍历比较,但是想想几十万的数据量,而且对于某一行数据,就要拿其他所有的行跟它作比较,这个太耗时间了,后来也在群里问了别人,有人建议我用python的rolling进行滚动计算,也有人说必须循环,还有人说用R语言的filter,但都觉得很麻烦,而且不一定能行,最后想到的是将所有数据同时乘以10的4次方,构造辅助列,然后round取整,使用drop_duplicates辅助列去重可以解决,但是发现,round是四舍五入取整,如0.99998和1.00002这两个数就可以看作重复,但是有些数据比如1.00002和1.00005,就会被分为两类,因此这里面应该还要int取整,因此应将数据前后进行round去重和int去重(顺序可以调换),最终得到正确的结果。
代码如下:
[code]data_final['t11']=(data_final['t1'].astype(np.float32)*1E4).apply(round) data_final['t21']=(data_final['t2'].astype(np.float32)*1E4).apply(round) data_final.drop_duplicates(subset=['t11','t21'], keep='first', inplace=True) data_final=data_final.drop(columns=['t11','t21']) data_final=data_final.reset_index(drop=True) data_final['t11']=(data_final['t1'].astype(np.float32)*1E4).apply(int) data_final['t21']=(data_final['t2'].astype(np.float32)*1E4).apply(int) data_final.drop_duplicates(subset=['t11','t21'], keep='first', inplace=True) data_final=data_final.drop(columns=['t11','t21']) data_final= data_final.reset_index(drop=True) data_final.to_csv("points.csv",index=False,sep=',')
构造辅助列十分重要,根据辅助列去重复行:
相关文章推荐
- pandas:根据行间差值进行数据合并
- 编写一个三角形类,能根据输入的3个double类型数据构造三角形对象,定义三个构造方法。如果这3个数据满足构成三角形的条件,直接构造三角形。否则,如果3个数的最大值大于0,则自动构造以最大值为边的等边
- pandas处理finance.yahoo股票数据 WTI CL USO OIL
- 数据处理:由面得点,构造其边界
- Pandas100秒处理一亿行数据
- 根据数据列条件改变行背景
- Python-Pandas(3)数据预处理
- 本地数据 根据输入条件进行检索数据
- 使用pandas对矢量化数据进行替换处理
- 前端获取到后端数据后,要根据数据类型传输不同的属性值到后端,后端完成特殊业务处理
- Pyhton科学计算工具Pandas(六)—— 文本数据处理
- Java ssh poi 根据条件查询数据导出excel到浏览器 下载框不显示 浏览器乱码 之前是用submit()
- 根据已经加载好的datagrid数据,通过条件查询进行重新根据查询的条件进行加载:(无需通过后台再次查询)
- Pandas 处理丢失数据
- python3中如何在列表,字典,集合中根据条件刷选数据
- python-1-如果在列表,字典在,集合中根据条件筛选数据?
- SpringMVC根据条件跳转页面或者返回数据类型
- pandas(五)处理缺失数据和层次化索引
- 数据分析处理库Pandas-常用函数
- 利用Python进行数据分析(10) pandas基础: 处理缺失数据