
414
12
章
pandas
:応用編
シリーズやデータフレームのオブジェクトを引数に取り、処理後にシリーズやデータフレームのオブ
ジェクトを戻す関数を使うときは、次のような
pipe
メソッドの呼び出しを用いた書き方に書き換えるこ
とが可能です。
result = (df.pipe(f, arg1=v1)
.pipe(g, v2, arg3=v3)
.pipe(h, arg4=v4))
f(df)
という文と
df.pipe(f)
という文では、処理内容に違いはありません。しかし、
pipe
を用いた表
現の方が、メソッドチェーン形式での呼び出しを簡単に行えます。
pipe
を使うと便利になる可能性があるのは、いくつかの連続した演算を再利用可能な関数として一
般化し、
pipe
と一緒に使うようなパターンです。例として、次のような、一部の行をグループ化して平
均値を取り、ある列から引く計算を考えてみましょう。
g = df.groupby(['key1', 'key2'])
df['col1'] = df['col1'] - g.transform('mean')
このとき、複数の列から平均値を引いたり、グループ化するキーを簡単に変更したりしたいとします。
さらに、この変換をメソッドチェーンで行いたいとします。その場合、処理を一般化した関数の実装例
はこんな感じになります。
def group_demean(df, by, cols):
result = df.copy()
g = df.groupby(by)
for c in ...