根据pandas中的列表删除行

时间:2017-10-27 15:11:23

标签: python pandas dataframe

node1    node2    weight  date


3         6     1        2002

2          7     1        1998

2          7     1        2002

2          8     1        1999

2         15     1        2002

9        15     1        1998

2         16     1        2003

2         18     1        2001

我想删除值为[3, 7, 18]的行。这些值可以位于任何行node1node2中。

1 个答案:

答案 0 :(得分:5)

In [8]: new = df[~df.filter(regex='^node').isin([3,7,18]).any(1)]

In [9]: new
Out[9]:
   node1  node2  weight  date
3      2      8       1  1999
4      2     15       1  2002
5      9     15       1  1998
6      2     16       1  2003

一步一步:

In [164]: df.filter(regex='^node').isin([3,7,18])
Out[164]:
   node1  node2
0   True  False
1  False   True
2  False   True
3  False  False
4  False  False
5  False  False
6  False  False
7  False   True

In [165]: df.filter(regex='^node').isin([3,7,18]).any(1)
Out[165]:
0     True
1     True
2     True
3    False
4    False
5    False
6    False
7     True
dtype: bool

In [166]: ~df.filter(regex='^node').isin([3,7,18]).any(1)
Out[166]:
0    False
1    False
2    False
3     True
4     True
5     True
6     True
7    False
dtype: bool

In [167]: df[~df.filter(regex='^node').isin([3,7,18]).any(1)]
Out[167]:
   node1  node2  weight  date
3      2      8       1  1999
4      2     15       1  2002
5      9     15       1  1998
6      2     16       1  2003