我有dataframe
name cat1 cat2 cat3
'aa bb' A A-1 A-1-1
'cc dd' B B-1 B-1-1
'ee aa' C C-1 C-1-1
'gg bb' D D-1 D-1-1
我有这样的列表
list_words = ['aa', 'gg']
我想删除所有包含的行 list_words
更新
我用过这个代码但是太慢了,这个代码只用于aa
dfg = dataframe.loc[dataframe.name.str.contains("aa", na=False)]
df_name = dfg.name.tolist()
for k in df_name:
dataframe.drop(dataframe.loc[dataframe.name == k].index)
答案 0 :(得分:0)
这应该可以解决问题:
import numpy as np
import pandas as pd
df={'name':['aa bb', 'cc dd', 'ee aa', 'gg bb'], 'cat1':['A', 'B', 'C', 'D'], 'cat2':['A-1', 'B-1', 'C-1', 'D-1'], 'cat3':['A-1-1', 'B-1-1', 'C-1-1', 'D-1-1']}
df= pd.DataFrame(df)
list_words =['aa', 'gg']
for i in range(len(df['name'])):
if list_words[0] in name[i]:
df= df.drop([i])
elif list_words[1] in name[i]:
df= df.drop([i])
答案 1 :(得分:0)
这是一个更好的答案:
df={'name':['aa bb', 'cc dd', 'ee aa', 'gg bb'], 'cat1':['A', 'B', 'C', 'D'], 'cat2':['A-1', 'B-1', 'C-1', 'D-1'], 'cat3':['A-1-1', 'B-1-1', 'C-1-1', 'D-1-1']}
df= pd.DataFrame(df)
list_words =['aa', 'gg']
submask=df.name.str.split(expand=True)
mask=~submask.isin(list_words)
answer= df[mask[0] & mask[1]]