2017-10-12 3 views
3

lstにあるdfのリスト内の値の行を削除しようとしています。別のリストにあるリスト内の値のデータフレームの行を削除します

私はdf[df[x].isin(y)]を単数の文字列に使用していますが、同じメソッドを調整してdataframe内のリストを操作する方法についてはわかりません。

lst = ['f','a'] 

df

  Column1   Out1 
0   ['x', 'y']   a 
1   ['a', 'b']   i 
2   ['c', 'd']   o 
3   ['e', 'f']   u 
etc. 

私はリストの内包表記を使用しようとしましたが、Pandas

df = df[[i for x in list for i in df['Column1']]] 

エラーと同じように動作していないよう:

TypeError: unhashable type: 'list' 

私の予想される出力は次の通りです。 lstで値を持っているのリストを含む行を削除:

  Column1   Out1 
0   ['x', 'y']   a 
1   ['c', 'd']   o 
etc. 
+0

ループすることもできます。 –

答えて

2

あなたはマスク使用~を反転させるため、set秒に値を変換し&を使用し使用することができますと

df = pd.DataFrame({'Column1':[['x','y'], ['a','b'], ['c','d'],['e','f']], 
        'Out1':list('aiou')}) 

lst = ['f','a'] 
df1 = df[~(df['Column1'].apply(set) & set(lst))] 
print (df1) 
    Column1 Out1 
0 [x, y] a 
2 [c, d] o 

ソリューションnested list comprehension - booleanのリストを取得するため、すべての値がTrueであるかどうかを確認するためにallが必要です。

df1 =df[[all([x not in lst for x in i]) for i in df['Column1']]] 
print (df1) 
    Column1 Out1 
0 [x, y] a 
2 [c, d] o 

print ([[x not in lst for x in i] for i in df['Column1']]) 
[[True, True], [False, True], [True, True], [True, False]] 
+0

私の救世主!再度ありがとう:-) – LearningToPython

+0

私はちょっとした問題に直面しています。 'lst'に既に何かが含まれている場合、あなたが提案したコードはうまくいくようです。 「f」と「a」です。しかし、もし私が 'lst'に何かを追加してコードを実行すると、それはうまくいかないようです。 – LearningToPython

+0

うーん、うまくいくはずです。残念ながら私は寝るつもりですが、明日は確認できます。あなたの問題に変更の質問がありますか?ありがとう。 – jezrael

関連する問題