在Pandas中删除在不同列中具有重复值的列的有效方法

时间:2019-04-02 17:29:32

标签: python python-3.x pandas

我正在Pandas中寻找一种有效且优雅的方法来删除DataFrame中具有完全相同的值集但在不同列中的“重复”行。

理想情况下,我正在寻找一种矢量化的方法来执行此操作,因为我已经可以使用熊猫pandas.DataFrame.iterrows()方法来识别效率很低的方法。

说我的DataFrame是:

source|target|
----------------
| 1   |  2   |
| 2   |  1   |
| 4   |  3   |
| 2   |  7   |
| 3   |  4   |

我希望它成为:

source|target|
----------------
| 1   |  2   |
| 4   |  3   |
| 2   |  7   |

1 个答案:

答案 0 :(得分:1)

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