2016-04-07 10 views
0

Zuerst muss ich mich entschuldigen, wenn meine Frage ein wenig vage ist. Es ist eine vereinfachte Version eines längeren Problems. Unter Verwendung eines Spielzeug Beispiel habe ich eine rekursive Funktion als solche definiert:Recuring basierend auf einer Liste von Pandas Series Werte

Recur(x,z): 
    if stopping criterion: 
     ... 
    else: 
     S = (some output in pd.Series type) 
     if S == 0: 
      return Recur(x,z) 
     else: 
      return Recur(y,z) 

Grundsätzlich S enthält eine Reihe von pandas 1en und 0en. Und abhängig davon, ob das i-te Element von S eine 1 oder eine 0 ist, wird die entsprechende Rekursion ausgeführt. Diese ganze Rekursionsbaum wird für jedes Element in S. wiederholte Betätigung diese Funktion gibt die folgenden Fehler:

*File "<ipython-input-92-05fb4b8bad66>", line 12, in Recur 
    if split_feature_value == 0: 
    File "C:\Users\dp\Anaconda3_2.5.0\lib\site-packages\pandas\core\generic.py", line 731, in __nonzero__.format(self.__class__.__name__))* 

*ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().* 

Idealerweise würde ich dies gerne als Lambda-Funktion verwenden, die ich zu Datenrahmen anwenden kann, so dass ich denke, die Indizierung als eine mögliche Lösung ist ausgeschlossen.

Kann ich Hilfe bekommen, damit das funktioniert?

Antwort

0

versuchen, es in der folgenden Art und Weise zu vergleichen:

In [227]: S = pd.Series([0,0,0,0,0,0]) 

In [228]: (S == 0).all() 
Out[228]: True 

In [229]: S[1] = 1 

In [230]: S 
Out[230]: 
0 0 
1 1 
2 0 
3 0 
4 0 
5 0 
dtype: int64 

In [231]: (S == 0).all() 
Out[231]: False 
+0

ich so traurig bin, wenn ich nicht klar, früher war. Ich denke mein Problem ist näher dran: wenn S == 0: func(). Wenn also S = pd.Series ([0,0,0]), würde func() dreimal aufgerufen werden. Ich bekomme den gleichen Fehler wie bei meiner ursprünglichen Frage. – beginner

+0

@beginner, im Grunde wollen Sie nicht Schleife oder Rekursion durch Ihre Pandas DFs, Sie wollen mit vektorisierten Datensätzen arbeiten. Ich würde Ihnen empfehlen, einen kleinen Eingabedatensatz (5-7 Zeilen) zur Verfügung zu stellen, zu erklären, was Sie mit diesem Datensatz machen möchten, und eine erwartete Ausgabe bereitzustellen. Auf diese Weise wird die SO-Community (hoffentlich) in der Lage sein, Ihnen den effizientesten/elegantesten Weg zu bieten, dies zu tun. Bitte geben Sie alle Datensätze im Format __text__ an, andernfalls ist es nicht möglich, sie für die Entwicklung einer Lösung zu kopieren und einzufügen – MaxU

Verwandte Themen