web-dev-qa-db-ja.com

2つの既存の列でラムダ関数を使用してPandaで新しい列を作成する

ユーザー関数を定義し、applyを使用して、Pandaに新しい列を追加できます。ただし、lambda;を使用してこれを行いたいです。回避方法はありますか?

たとえば、dfには2つの列abがあります。 caの間の最長の長さに等しい新しい列bを作成したい。

何かのようなもの:

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

1つのアプローチ:

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
16
piyush sharma

関数 map を使用し、関数np.whereで選択できます 詳細

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

次の解決策は、関数 apply パラメーターaxis=1を使用することです。

軸= 1または「列」:各行に関数を適用します

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