ユーザー関数を定義し、applyを使用して、Pandaに新しい列を追加できます。ただし、lambda;を使用してこれを行いたいです。回避方法はありますか?
たとえば、df
には2つの列a
とb
があります。 c
とa
の間の最長の長さに等しい新しい列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
関数 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)