我有一个数据框:
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]
最好的方法是什么?
答案 0 :(得分:0)
如果需要删除列表中的所有行,如果不是 A
或不是 E
,请使用 set.isdisjoint
和 Series.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.isin
与 DataFrame.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]