2014-05-01 2 views
1

Disons que j'ai une liste/itérables de n (où n est inconnu à la fonction) Série Pandas qui représentent les indices booléennes logiques et j'aimerais et tous les par éléments et utilisent la série résultante pour indexer un DataFrame.logique élément par élément et le nombre indéterminé de Pandas série

Actuellement, j'utilise np.logical_and(x1,x2) et une boucle for pour cela. Je n'ai pas eu beaucoup de chance en utilisant itertools.izip ou zip. L'objet pandas.Series n'a pas semblé aimer être opéré par eux.

Je me gratte la tête depuis quelque temps à propos de ce que je ne vois peut-être pas pourquoi cela semble aboutir à une série de booléens mais je reçois ensuite IndexingError: Unalignable boolean Series key provided lors de l'exécution.

Des pensées? Je me sens comme si ce sont ndarray qu'il doit y avoir une façon évidemment propre à faire cela.

Répondre

2

En supposant que je vous comprends, vous pouvez utiliser logical_and.reduce. A partir d'une liste de la série:

>>> ss = [pd.Series([ True, False, True, False, True]), pd.Series([False, True, True, False, False]), pd.Series([False, False, True, False, True]), pd.Series([False, True, True, False, False]), pd.Series([ True, True, True, True, False])] 

qui ressemblerait

>>> pd.DataFrame(ss) 
     0  1  2  3  4 
0 True False True False True 
1 False True True False False 
2 False False True False True 
3 False True True False False 
4 True True True True False 

[5 rows x 5 columns] 

si elle était un dataframe, vous pouvez réduire à travers les colonnes:

>>> np.logical_and.reduce(ss) 
array([False, False, True, False, False], dtype=bool) 

ou passer axis=1 si vous veux l'autre direction.

Rappelez-vous que vous pouvez également utiliser any et all, par exemple

>>> df = pd.DataFrame(ss) 
>>> df.all() 
0 False 
1 False 
2  True 
3 False 
4 False 
dtype: bool 
+0

Parfait! Je vous remercie... – PatternMatching

Questions connexes