【发布时间】:2019-06-22 22:32:50
【问题描述】:
我有包含source_image_name、dest_image_name、score 列的数据框。这些行有重复,其中source_image_name 在dest_image_name 中,反之亦然。我正在尝试消除这种情况。
我尝试过使用 iterrows() 和过滤器进行迭代。在搜索之前,我创建了图像名称的哈希并将它们存储在新列中。
示例数据框
|源图像 |目标图像 |分数 |
|-------------- |------------- |------- |
| image_1.jpg | image_2.jpg | 5 |
| image_2.jpg | image_1.jpg | 5 |
| image_3.jpg | image_4.jpg | 10 |
| image_4.jpg | image_3.jpg | 10 |
| image_3.jpg | image_5.jpg | 9 |
df["hash_source"] = df["source_image"] + df["dest_image"]
df["hash_dest"] = df["dest_image"] + df["source_image"]
df["is_delete"] = 0
for idx,item in df.iterrows():
# Set column value to mark the row for deletion
if item["is_delete"] == "0":
df[df["hash_dest"]==item["hash_source"]]["is_delete"] = 1
我期待找到一种有效的方法来识别这些行。我正在考虑为每个图像名称计算数字哈希并将它们添加到一列中以查找重复的行。但是我认为这样做会产生冲突。
输出数据帧
|源图像 |目标图像 |分数 |
|-------------- |------------- |------- |
| image_1.jpg | image_2.jpg | 5 |
| image_3.jpg | image_4.jpg | 10 |
| image_3.jpg | image_5.jpg | 9 |
【问题讨论】:
-
您只是想让这些行消失吗?您的示例中显示的二进制关系是否保证所有重复的名称?
-
我希望第一次出现的行消失。不幸的是,我没有看到整个数据集的二元关系。但是,如果有二进制的解决方案,我可以将非二进制的从数据帧中分离出来。
-
所以假设第 1 行的
dest_image与第 2 行的source_image同名,但第 2 行的dest_image与第 2 行的source_image同名1. 这种情况下的预期结果是什么? -
这是一个有效的行,我想保留在数据框中。我正在尝试识别
source、dest倒置的行,以便我可以删除其中一个。我已经更新了附加文件名以进行比较的代码。