python - Pandas 中删除不同列中具有重复值的列的有效方法
问题描述
我正在 Pandas 中寻找一种高效且优雅的方法来删除 DataFrame 中具有完全相同的值集但在不同列中的“重复”行。
理想情况下,我正在寻找一种矢量化的方法来做到这一点,因为我已经可以使用 Pandas 方法识别非常低效的pandas.DataFrame.iterrows()
方法。
假设我的 DataFrame 是:
source|target|
----------------
| 1 | 2 |
| 2 | 1 |
| 4 | 3 |
| 2 | 7 |
| 3 | 4 |
我希望它变成:
source|target|
----------------
| 1 | 2 |
| 4 | 3 |
| 2 | 7 |
解决方案
df = df[~pd.DataFrame(np.sort(df.values,axis=1)).duplicated()]
source target
0 1 2
2 4 3
3 2 7
解释:
np.sort(df.values,axis=1)
正在对 DataFrame 列进行排序
array([[1, 2],
[1, 2],
[3, 4],
[2, 7],
[3, 4]], dtype=int64)
然后从中制作一个数据框并 non duplicated
使用前缀~
进行检查duplicated
~pd.DataFrame(np.sort(df.values,axis=1)).duplicated()
0 True
1 False
2 True
3 True
4 False
dtype: bool
并以此作为mask
最终输出
source target
0 1 2
2 4 3
3 2 7
推荐阅读
- navicat - 使用 Navicat 如何添加 UpdatedTime 字段?
- node.js - 插入相关集合时出现“E11000 重复键错误集合:类索引:student.name_1 重复键:{:null}”
- c# - AngleSharp:如何从标签中的标签解析数据
- angular - 启用 NX 计算缓存会导致库在构建中失败
- ios - 如何使用 swift 在 iOS 中使用 RTL 语言(如阿拉伯语)从右到左使用?
- android - 应用插件请求时发生异常 [id: 'com.palantir.configuration-resolver', version: '0.1.0']
- javascript - 从另一个 JS 文件调用函数 - Electron
- python-3.x - 你如何在 python 中模拟多个文件打开和读取?
- c++ - (ROS 节点)用于欧拉积分以估计知道加速度的速度
- java - 如何在应用程序运行时访问 Manifest 文件?