pandas

メモ: pandas で `A + B` という文字から結果を導き、ログ用の文字列も作成する

たとえば次のような df があったとする。

import pandas as pd
df = pd.DataFrame(index=[1,2,3], data={A:[4,5,6],B:[7,8,9]})
>>> df
   A  B
1  4  7
2  5  8
3  6  9

やりたいこと: A + B の結果を C 列に代入し、 D 列に計算の内容を下記のようにログとして保存したい。

理想形
   A  B   C                    D
1  4  7  11  C(11) = A(4) + B(7)
2  5  8  13  C(13) = A(5) + B(8)
3  6  9  15  C(15) = A(6) + B(9)

下記のようなコードで実現可能。

expr = 'A + B'

# 計算結果を保存
df['C'] = df.eval(expr)

# df の内容で置き換えする関数
def _replace_log(log, v_list):
    for i, v in v_list.iteritems():
        log = log.replace(i, '{}({})'.format(i, v))
    return log
# ログ用の文字列を保存
df['D'] = [_replace_log('C = ' + expr, v) for i, v in df.iterrows()]

もっと良いやり方があるだろうか。