2015-11-12 8 views
6

ユーザ機能を定義してからapplyを使用して、新しいカラムをPandaに追加できます。しかし、私はラムダを使ってこれを行いたいと思います。周りに道があるのですか?既存の2つのカラムでlambda関数を使用してパンダで新しいカラムを作成する

たとえば、dfは、2つの列aおよびbを持っています。私はabの間の最長の長さに等しい新しい列cを作成したいと思います。

いくつかの事のように:

df['c'] = df.apply(lambda x, len(df['a']) if len(df['a']) > len(df['b']) or len(df['b'])) 

一つのアプローチ:

df = pd.DataFrame({'a':['dfg','f','fff','fgrf','fghj'], 'b' : ['sd','dfg','edr','df','fghjky']}) 

df['c'] = df.apply(lambda x: max([len(x) for x in [df['a'], df['b']]])) 
print df 
     a  b c 
0 dfg  sd NaN 
1  f  dfg NaN 
2 fff  edr NaN 
3 fgrf  df NaN 
4 fghj fghjky NaN 
+0

あなたは構文エラーを修正したら、これは動作します。 'lambda x'はそれの後にコロンを必要とし、式に' else'がありません( 'or'の代わりに使うべきかもしれません)。 –

+0

クイックレスポンスのおかげで、それでも動作しません。ここにコードとエラーメッセージがあります。何か助けてもらえれば幸いです。df = pd.DataFrame({'a':['dfg'、 'f'、 'fff'、 'fgrf'、 'fghj']、 'b':['sd'、 'dfg'、 'edr' len(x ['a'])> len(x ['a'])ならばdf ['c'] = df.apply(lambda x:len(x ['a']) KeyError:( 'a'、u'curred、index a ') –

+0

コメントにコードを入れず、質問を[編集]してください。 –

答えて

6

あなたは次のソリューションが持つ機能applyであるnp.wheremore info

print df 
#  a  b 
#0 aaa rrrr 
#1 bb  k 
#2 ccc  e 
#condition if condition is True then len column a else column b 
df['c'] = np.where(df['a'].map(len) > df['b'].map(len), df['a'].map(len), df['b'].map(len)) 
print df 
#  a  b c 
#0 aaa rrrr 4 
#1 bb  k 2 
#2 ccc  e 3 

機能によって機能mapを使用して選択することができますパラメTER axis=1

axis = 1 or ‘columns’: apply function to each row

df['c'] = df.apply(lambda x: max(len(x['a']), len(x['b'])), axis=1) 
+0

マップは機能するかもしれませんが、主に2つの列を持つLambdaを使用し、可能であれば新しい列を作成する方法を探しています –

+1

なぜラムダを使用しますか? – jezrael

+0

軸= 1それは私が行方不明だったことです多くのおかげで –

関連する問題