🗂
pandasのカラムを加工して別カラムに保存
「カラムの値をちょっと加工して使いたい!!!」ってことがよくあるんですが、いつもやり方忘れるのでメモしときます。
0. データ準備
import pandas as pd
df = pd.DataFrame(
{
'x': [1,2,3],
'y': [1,4, -9],
}
)
df.head()
=======================
x y
0 1 1
1 2 4
2 3 -9
=======================
1. 簡単な計算例
yの符号を逆にしてみる
df['y'] = -df['y']
df.head()
==================================
x y y_reverse
0 1 1 -1
1 2 4 -4
2 3 -9 9
==================================
2. lambdaを使う
- の簡単な計算はlambdaを使って以下のようにも書けます。
lamda xのxはlamdaのエイリアスなのでdf['x']のxとは関係ないです。
df['y__reverse_lamda'] = df.apply(lambda x: -x['y'], axis=1)
(参考にした記事)
3. 関数を定義して使う
もっと複雑な計算をしたい場合はlamdaの箇所を外で定義して呼び出して使えます。
今回は値の絶対値を求める処理を書いてみます。
3.1 関数を定義
def func_get_absolute(x):
if x >= 0:
# 値が0以上ならそのまま返す
return x
else:
# 値が負なら正にして返す
return -x
3.2 applyで関数を呼び出して使う
df['y_absolute'] = df['y'].apply(func_get_absolute)
df.head()
==================================
x y y_absolute
0 1 1 1
1 2 4 4
2 3 -9 9
==================================
(参考にした記事)
3.3 複数のカラムをapply関数の引数にする場合
df['xxxx'] = df.apply(func_get_absolute, axis=1)
3.4 apply関数のリターンを複数カラムにする場合
def func_get_absolute(x):
# 処理 xxx
return pd.Series([hoge1, hoge2])
df[['xxx1', 'xxx2']] = df.apply(func_get_absolute, axis=1)
Discussion