我正在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 |
答案 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