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

时间:2019-07-03 20:30:15

标签: python-3.x pandas numpy numpy-ndarray matrix-indexing

我试图摆脱包含熊猫数据框中前两列元素组合的行,例如在下一个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中执行此操作的任何提示,将不胜感激。

1 个答案:

答案 0 :(得分:2)

如果我对您的理解正确,那么您就很接近了,您只需要将布尔数组传递回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