如何从 pandas 数据框中删除包含前两列组合的行

How to remove rows from pandas dataframe that contain combinations of the first two columns

我试图摆脱包含 pandas 数据框中前两列的元素组合的行,例如,在下一个 df:

     event1    event2    uccs   ulags
0  327423.0  329243.0  0.1663 -0.6013
1  327423.0  329589.0  0.1911 -0.4730
2  329243.0  327423.0  0.1663  0.6013
3  329243.0  329589.0  0.3101 -0.7502
4  329589.0  327423.0  0.1911  0.4730
5  329589.0  329243.0  0.3101  0.7502

第 0 行和第 2 行表示元素的组合:event1 和 event2。即:

0  327423.0  329243.0
2  329243.0  327423.0

一般来说,我需要将矩阵或 df 减少到 3 行,删除所有重复项。

我试了下没有成功:

 u = df.filter(like='event1').values
 m = pd.DataFrame(np.sort(u, axis=1)).duplicated()

这样做我得到:

    event1    event2    uccs   ulags
0  327423.0  329243.0  0.1663 -0.6013
2  329243.0  327423.0  0.1663  0.6013
4  329589.0  327423.0  0.1911  0.4730

但是如您所见,第 0 行和第 2 行是重复的。关于如何在 pandas 或 numpy 中执行此操作的任何提示将不胜感激。

如果我没理解错的话,你已经非常接近了,你只需要将你的布尔数组传回你的数据框 boolean indexing:

df[~pd.DataFrame(np.sort(df.filter(like='event'), axis=1)).duplicated()]

     event1    event2    uccs   ulags
0  327423.0  329243.0  0.1663 -0.6013
1  327423.0  329589.0  0.1911 -0.4730
3  329243.0  329589.0  0.3101 -0.7502

注意我使用的 ~ 是相反的或 not 运算符:

m = pd.DataFrame(np.sort(df.filter(like='event'), axis=1)).duplicated()

print(m)

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

现在反转:

print(~m)

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