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

3
我希望在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   |

这是一个重复的问题,很多人都问过这个。可以看一下这个链接:https://dev59.com/763la4cB1Zd3GeqPKUcs - rafaelc
这确实是一个重复的问题。RafaelC提供的链接包含了你的答案。你的解决方案在这里:pd.DataFrame(np.sort(df.values, axis=1), columns=df.columns).drop_duplicates() - Erfan
非常感谢,很抱歉没有注意到这个问题。 - Noelmas
1
可能是Sorting df rows horizontally的重复问题。 - Erfan
1个回答

2
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)

然后从中创建一个数据帧,使用前缀为~duplicated检查非重复项

~pd.DataFrame(np.sort(df.values,axis=1)).duplicated()

0     True
1    False
2     True
3     True
4    False
dtype: bool

使用此作为“掩码”,获取最终输出。
    source  target
0   1   2
2   4   3
3   2   7

1
嗨Akhilesh,虽然这可能是正确的答案,但你应该留下一些见解/解释,以使它成为一个有质量的答案,帮助其他人理解问题的根本原因。 - nircraft
@nircraft 谢谢你指出这个问题。请查看更新内容。 - Akhilesh_IN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接