質問: now - start ``` ### 試したこと df.locで無理そうだったのでfor文でやってみましたが上手くいきません。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。
回答: > > 全ての値が「5940 days 19:39:15.155828」という値になります。 > > > データフレームの列のそれぞれの値に対してfor文が実行されるのはおわかりでしょうか?ご質問のコードではforループを実行してはいますが毎回startという変数を上書きしているだけなので列の最後の値だけがstartに残るため最後に代入した結果が同じ値になってしまうのです。 列のそれぞれの値になんらかの計算を施す場合、四則演算などですと一々ループを書かなくても`dataframe['column-name'] * 10`と書くだけで「列の個々の要素それぞれに10を乗じる」という機能になってますね。 では自分で定義した演算(関数)をどうやって個々の要素に適用するかといえば一つの方法としてapplyを使う方法があると思います。 ``` def diff_from_now(v): return now - datetime.datetime.strptime(v, '%Y/%m/%d')) df['X2'] = df['X2'].apply(diff_from_now) # または直接lambda式として関数を指定してもよい df['X2'] = df['X2'].apply(lambda v: \ now - datetime.datetime.strptime(v, '%Y/%m/%d')) ```