

下記では上手く実行されるのに

[code]

    df['flag'] = df['current'].apply(lambda x : 1 if x >= 5000 else 0 )
    
[/code]

下記に変更するとエラーがでます。

[code]

    df['flag'] = df['current'].apply(lambda x : 1 if x >= df['current2'] else 0 )
    
[/code]

エラーメッセージ

[code]

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


CC BY-SA 4.0
2018-12-08T09:41:30.877
51039
2018-12-08T15:20:52.200
2018-12-08T15:20:52.200
19110
31357
question
python pandas lambda
lambdaの使い方を教えてください。


複数の列で`apply`を使用したい場合は、SeriesではなくてDataFrameに対して適用する必要があります。

[code]

    df['flag'] = df.apply(lambda x: 1 if x.current >= x.current2 else 0, axis=1)
    
[/code]

でも、質問のような計算では、Pandasのベクトル演算を使いましょう。

[code]

    df['flag'] = (df['current'] >= df['current2']).astype(int)
    
[/code]


CC BY-SA 4.0
2018-12-08T10:47:21.140
51040
2018-12-08T10:47:21.140
15171
51039
answer