🗂

pandasのカラムを加工して別カラムに保存

2021/09/24に公開

「カラムの値をちょっと加工して使いたい!!!」ってことがよくあるんですが、いつもやり方忘れるのでメモしときます。

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を使う

  1. の簡単な計算はlambdaを使って以下のようにも書けます。
    lamda xのxはlamdaのエイリアスなのでdf['x']のxとは関係ないです。
df['y__reverse_lamda'] = df.apply(lambda x: -x['y'], axis=1)

(参考にした記事)
https://note.com/enkey/n/n6c60800c9b43

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
==================================

(参考にした記事)
https://qiita.com/Hyperion13fleet/items/98c31744e66ac1fc1e9f

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