spitfiredd
spitfiredd

Reputation: 3135

Pandas, add date column to a series

I have a timeseries dataframe that is data agnostic and uses period vs date.

I would like to at some point add in dates, using the period.

My dataframe looks like

period custid
1      1
2      1
3      1
1      2
2      2
1      3
2      3
3      3
4      3

I would like to be able to pick a random starting date, for example 1/1/2018, and that would be period 1 so you would end up with

period custid date
1      1      1/1/2018
2      1      2/1/2018
3      1      3/1/2018
1      2      1/1/2018
2      2      2/1/2018
1      3      1/1/2018
2      3      2/1/2018
3      3      3/1/2018
4      3      4/1/2018

Upvotes: 2

Views: 443

Answers (1)

sacuL
sacuL

Reputation: 51425

You could create a column of timedeltas, based on the period column, where each row is a time delta of period dates (-1, so that it starts at 0). then, starting from your start_date, which you can define as a datetime object, add the timedelta to start date:

start_date = pd.to_datetime('1/1/2018')

df['date'] = pd.to_timedelta(df['period'] - 1, unit='D') + start_date

>>> df
   period  custid       date
0       1       1 2018-01-01
1       2       1 2018-01-02
2       3       1 2018-01-03
3       1       2 2018-01-01
4       2       2 2018-01-02
5       1       3 2018-01-01
6       2       3 2018-01-02
7       3       3 2018-01-03
8       4       3 2018-01-04

Edit: In your comment, you said you were trying to add months, not days. For this, you could use your method, or alternatively, the following:

from pandas.tseries.offsets import MonthBegin

df['date'] = start_date + (df['period'] -1) * MonthBegin()

Upvotes: 3

Related Questions