pandas 数据框按列表列的值过滤行

时间:2021-03-15 07:18:14

标签: python pandas dataframe

我有一个数据框:

df = col1. col2. col3
      1.    2.   []
      3.    1.   [A]
      8.    9.   [C,D]
      2.    4.   [E]
      9.    2.   [E,T]

当 E 不在 col3 且 A 不在 col3 时,我只想取行 所以在这个例子中,我将有:

      1.    2.   []
      8.    9.   [C,D]

最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

如果需要删除列表中的所有行,如果不是 A 或不是 E,请使用 set.isdisjointSeries.map

df = df[df.col3.map(set(['A','E']).isdisjoint)]
print (df)
   col1  col2    col3
0   1.0   2.0      []
2   8.0   9.0  [C, D]

另一个想法是将列表转换为 DataFrame,因此可以将 DataFrame.isinDataFrame.any 一起使用:

df = df[~pd.DataFrame(df.col3.tolist(), index=df.index).isin(['A','E']).any(axis=1)]
print (df)
   col1  col2    col3
0   1.0   2.0      []
2   8.0   9.0  [C, D]

如果只需要测试E

df = df[~df.col3.map(lambda x: 'E' in x)]
print (df)
   col1  col2    col3
0   1.0   2.0      []
1   3.0   1.0     [A]
2   8.0   9.0  [C, D]