2016-04-07 9 views
0

私の質問が少し曖昧であればまず謝らなければならない。これは、より長い問題の簡略版です。パンダのリストに基づいて再帰シリーズの値

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) 

は、基本的にはSは、1と0のパンダシリーズが含まれています。おもちゃの例を使用して、私は再帰関数のような定義されています。そして、Sのi番目の要素が1か0かによって、適切な再帰が実行されます。

*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().* 

は、理想的には私が私がデータフレームに適用することができますラムダ関数としてこれを使用したいと思いますので、私はとインデックスを数える:この全体の再帰ツリーは、この機能を実行すると、次のエラーを与えるS.内の各要素に対して繰り返されます潜在的な問題は解決されていません。

これを動作させるには何か助けてもらえますか?

答えて

0

は、次のようにそれを比較してみてください:

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

私は以前に明確ではなかった場合はごめんなさい。私は私の問題はこれに近いと思う:もしS == 0なら:func()。したがって、S = pd.Series([0,0,0])の場合、func()は3回呼び出されます。私は私の元の質問と同じエラーを取得します。 – beginner

+0

@beginner、基本的には、あなたのパンダDFをループしたり、再帰をしたくない場合は、ベクトル化されたデータセットを使用したいと思っています。小さな入力データセット(5〜7行)を提供し、このデータセットで何をしたいのかを説明し、期待される出力を提供することをお勧めします。このようにして、SOコミュニティは、(うまくいけば)あなたにそれを行う最も効率的でエレガントな方法を提供することができます。すべてのデータセットを__text__形式で指定してください。そうしないと、ソリューションを開発するためにコピー&ペーストすることはできません – MaxU

関連する問題