pandasデータフレームに日付列とint列の2つの列があり、日付列にint列(日数)を追加したいだけです。解決策が見つかりましたdf.apply()を使用していますが、これは私のデータセット全体では遅すぎました。これをベクトル化した方法で実行することに関する大量のドキュメントは表示されません(私が見つけた最も近いものは this でした)、それで、私が見つけた解決策が前進するための最良の方法であることを確認したかったのです。
私の生データは、int(日)の列としての文字列の列です。
import pandas as pd
from datetime import timedelta
df = pd.DataFrame([['2016-01-10',28],['2016-05-11',28],['2016-02-23',15],['2015-12-08',30]],
columns = ['ship_string','days_supply'])
print df
ship_string days_supply
0 2016-01-10 28
1 2016-05-11 28
2 2016-02-23 15
3 2015-12-08 30
私の最初の考え(うまくいった)は、次のように.applyを使用することでした:
def f(x):
return x['ship_date'] + timedelta(days=x['days_supply'] )
df['ship_date'] = pd.to_datetime(df['ship_string'])
df['supply_ended'] = df.apply(f,axis = 1)
それはうまくいったが、非常に遅い。質問への回答として以下の代替ソリューションを投稿しましたが、それが「ベストプラクティス」であることを確認したいのですが。 pandas(特にベクトル化された方法で))の日付にtimedelta列を追加するのに適したスレッドを多く見つけることができなかったので、もう少しユーザーフレンドリーでうまくいけば1つ追加すると思いますそれはこれをやろうとしている次の貧しい魂を助けるでしょう。
完全なコードソリューション:
import pandas as pd
from datetime import timedelta
df = pd.DataFrame([['2016-01-10',28],['2016-05-11',28],['2016-02-23',15],['2015-12-08',30]],
columns = ['ship_string','days_supply'])
df['ship_date'] = pd.to_datetime(df['ship_string'])
df['time_added'] = pd.to_timedelta(df['days_supply'],'d')
df['supply_ended'] = df['ship_date'] + df['time_added']
print df
ship_string days_supply ship_date time_added supply_ended
0 2016-01-10 28 2016-01-10 28 days 2016-02-07
1 2016-05-11 28 2016-05-11 28 days 2016-06-08
2 2016-02-23 15 2016-02-23 15 days 2016-03-09
3 2015-12-08 30 2015-12-08 30 days 2016-01-07
これが良いベクトル化された解決策ではない場合は、以下のコメントでお知らせください。編集します。