Pythonでpandasによるデータ分析処理を進めていて、列同士の演算の仕方について教えてもらえないでしょうか。
import datetime import pandas as pd df1 = pd.DataFrame({'date': ["2019-03-04", "2019-03-07", "2019-03-14"], 'diff_days': [4, 7, 11]}) print(df1) # """結果""" # date diff_days # 0 2019-03-04 4 # 1 2019-03-07 7 # 2 2019-03-14 11
例えばこのようなデータフレームがあったときに、新たに1列追加して、
date列にdiff_daysの値分の日数を後ろにずらした日を取得したいとします。
リスト内方表記を使えば下記のように書けるのですが、できればmap()などでスマートかつリスト内方表記を避けて書けるように
なりたいため、そういった方法を教えてもらいたいと思います。
## リスト内方表記ではzip()を使ってこのようにかけるが、コードが読みづらくなる懸念がある df1['after_date'] = [datetime.datetime.strptime(x, '%Y-%m-%d') + datetime.timedelta(y) for x, y in zip(df1['date'], df1['diff_days'])] df1 # """結果""" # date diff_days after_date # 0 2019-03-04 4 2019-03-08 # 1 2019-03-07 7 2019-03-14 # 2 2019-03-14 11 2019-03-25
ちなみに、今回は複数列の計算なので若干複雑になっているのですが、単列を使った計算であれば下記のようにリスト内方表記を避けて書けます。参考までに記載します。
## date列の値を使って、一律で1日後ろにずらす df1['1day_after_date'] = df1['date'].map(lambda x: datetime.datetime.strptime(x, '%Y-%m-%d') + datetime.timedelta(1)) df1 # """結果""" # date diff_days 1day_after_date # 0 2019-03-04 4 2019-03-05 # 1 2019-03-07 7 2019-03-08 # 2 2019-03-14 11 2019-03-15
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/09 09:31