2017-01-25 42 views
0

我有一列用戶將在運行時提供的列。正因爲如此,名單可能會發生變化。大熊貓運行表達式以過濾列動態列名列

我想刪除一個DataFrame中的所有行,其列中的列值爲ALL。我如何在熊貓裏有效地做到這一點?最好的方法是簡單地迭代,還是有更多的「熊貓」方式來做到這一點?

回答

1

我認爲你可以使用boolean indexingall用於檢查所有True值:

df = pd.DataFrame({'A':[1,2,3], 
        'B':[1,5,6], 
        'C':[1,8,9], 
        'D':[1,3,5], 
        'E':[5,3,6], 
        'F':[7,4,3]}) 

print (df) 
    A B C D E F 
0 1 1 1 1 5 7 
1 2 5 8 3 3 4 
2 3 6 9 5 6 3 

cols = ['A','B','C'] 
val = 1 

print (df[cols] == val) 
     A  B  C 
0 True True True 
1 False False False 
2 False False False 

mask = ~(df[cols] == val).all(axis=1) 
print (mask) 
0 False 
1  True 
2  True 
dtype: bool 

print (df[mask]) 
    A B C D E F 
1 2 5 8 3 3 4 
2 3 6 9 5 6 3 
+0

啊,聰明!這正是我需要的東西。謝謝! – X33