2017-03-19 1 views
1

J'essaie de sélectionner une sous-section d'une base de données pandas où une certaine condition est remplie - dans ce cas, chaque élément d'une colonne donnée fait partie de une liste externe. J'ai été surpris de constater que cela ne fonctionne pas parce que d'autres instructions conditionnelles avec .loc sont si faciles. Comment puis-je faire ce travail?Sélection d'une partie d'une base de données selon que l'élément est dans un tableau externe

MWE:

import pandas as pd 
import numpy as np 

test_dict = {'first': [0,1,0,0,1,0], 'second': [1,2,3,4,5,6]} 

test_df = pd.DataFrame(test_dict) 

arr1 = [-1,-4,2,-9,8,7,-5,5,-8,0] 
arr2 = [2,5] 


new_df1 = test_df.loc[test_df.second in arr1] 
new_df2 = test_df.loc[test_df.second in arr2] 

print new_df1 
print new_df2 

Répondre

2

est Series.isin() ce que vous cherchez?

In [55]: new_df1 = test_df.loc[test_df.second.isin(arr1)] 

In [56]: new_df2 = test_df.loc[test_df.second.isin(arr2)] 

In [57]: new_df1 
Out[57]: 
    first second 
1  1  2 
4  1  5 

In [58]: new_df2 
Out[58]: 
    first second 
1  1  2 
4  1  5 

vous pouvez également utiliser SQL comme le style - DataFrame.query():

In [60]: test_df.query("second in @arr1") 
Out[60]: 
    first second 
1  1  2 
4  1  5 
+0

Cela a fonctionné à merveille. Je vous remercie! – Arnold