2017-05-11 12 views
0

私は6x3のパンダを持ち、列は時間を表します。動的に置き換える機能をデータセットに適用する

私は、条件の値を置き換えたい:

Cとkは一定である
def substituteMin(x,n,c,k): 
    if x < (1 - c)^n+sqrt(k): 
     x = (1 - c)^n+sqrt(k) 
    else: 
     pass 
    return x 
df1 = df.apply(lambda x: compareMin(x, x.name)) 
print (df1) 

。 nは列名です。 それは私が機能を置き換えるを見てみました

"ValueError: ('The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().', u'occurred at index 1.0')"

エラーが発生しますが、彼らは動作しませんでした。

+2

>「私は6x3で、列は時間を表し**パンダ**を持っています」 - 何を食べますか? – ThrowingSpoon

+0

'n、c、k'とは何ですか?彼らは定数ですか? – MaxU

+0

エラーは、系列に対して比較を行い、単一の値を返すことです。 Pandas/Pythonは、シリーズの一部がTrueでシリーズの一部がFalseの場合に返される単一の値を認識しません。したがって、あいまいな例外です。 all()やany()のような関数を使って、True/Falseを1つの値に減らすことができます。 –

答えて

0

ここではコードを簡略化しました。

def func(x,n=0,c=1,k=2): 
    if x < (1 - c)^n+sqrt(k): 
     x = (1 - c)^n+sqrt(k) 
    return x 
df1 = df.applymap(lambda x: func(x)) 
print (df1) 

変更:

  1. applymap要素単位交換します。
  2. 関数名が矛盾していました:substituteMin、compareMin。
  3. 関数(substituteMin)では、関数内でのみ定数変数(n、c、k)を設定できます。

(コメントするには十分と編集は、あなたの質問にあります。現在、私が権限を持っていません。)

+0

ありがとうございますが、nを列名にするにはどうすればよいですか?私は "lambda x:func(x、x.name)"を実行するでしょうが、 'x'は属性' name'を持たないので、 – Thegamer23

+0

が動作しません。あなたの目的を達成するためには、単純に行と列(ネストされた)を繰り返し処理する必要があります。例えば。 'for df: df.indexの行: y = func(df.loc [row、col]、col)' 注: ':' sの後に改行してください。ラムダのようなライナーではありません。 – rraadd88

関連する問題