2017-01-21 29 views
0
dfa = pd.DataFrame({'a':[1,2,3,4],'b':[4,5,7,6]}) 

列的預期輸出過濾「有什麼」,以在數據幀

a b 
0 1 4 
1 2 5 

我可以做到這一點通過以下方式

>>> dfa[(dfa.a == 1) | (dfa.a == 2)] 
    a b 
0 1 4 
1 2 5 

但是,這是不是真的可擴展的,因爲我想做類似的事情

?? dfa[(dfa.a has-any range(5,50)) 
+0

我不知道,如果知道 - 就是我的回答是否正確? – jezrael

回答

1

我認爲你需要boolean indexingisinnp.arangerange

print (np.arange(5,51)) 
[ 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50] 

print (dfa[dfa.a.isin(np.arange(5,51))]) 

或者:

print (dfa[dfa.a.isin(range(5,51))]) 

解決方案與between

print (dfa[dfa['a'].between(5, 50)]) 

樣品(一個值更改爲8):

dfa = pd.DataFrame({'a':[1,2,3,8],'b':[4,5,7,6]}) 
print (dfa) 
    a b 
0 1 4 
1 2 5 
2 3 7 
3 8 6 

print (dfa[dfa.a.isin(np.arange(5,51))]) 
    a b 
3 8 6 

print (dfa[dfa.a.isin(range(5,51))]) 
    a b 
3 8 6 

print (dfa[dfa['a'].between(5, 50)]) 
    a b 
3 8 6 
1

這也將做到:

import pandas as pd 
dfa = pd.DataFrame({'a':[1,2,3,4],'b':[4,5,7,6]}) 
print dfa['a'].between(5, 50).any() 
#False 
print dfa['b'].between(5, 50).any() 
#True 
print ((5 <= dfa) & (dfa <= 50)).any() # all columns together 
#a False 
#b  True 
#dtype: bool