首页 > 解决方案 > 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   |

标签: pythonpython-3.xpandas

解决方案


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

推荐阅读