使用周期列将月份添加到数据框中

时间:2019-06-19 13:28:07

标签: python python-3.x pandas dataframe datetime

我希望使用带有整数1-32的period列将%Y%m%d date列添加到我的数据框中,该列表示从定义的环境变量“ odate”开始的每月数据点(例如,如果为odate = 20190531,则期间1应该为20190531,期间2应该为20190630,依此类推)

我尝试定义了一个字典,该字典以列中的句点数作为键,值是odate + MonthEnd(period -1)

这很好并且很好;但是,鉴于周期数的变化,我想提高代码的灵活性。

是否有一个功能可以让我在时段1中用odate填充日期列,然后在随后的时段中使用下一个月末?

示例数据集:

odate = 20190531

period value
1      5.5
2      5
4      6.2
3      5
5      40
11     5

所需数据集:

odate = 20190531

period value date
1      5.5   2019-05-31
2      5     2019-06-30
4      6.2   2019-08-31
3      5     2019-07-31
5      40    2019-09-30
11     5     2020-03-31

1 个答案:

答案 0 :(得分:2)

您可以使用pd.date_range()

pd.date_range(start = '2019-05-31', periods = 100,freq='M')

您可以根据需要更改总期限,freq='M'表示月末频率

Here是可用于freq参数的偏移别名的列表。

如果您只想在日期上增加或减去某个时期,则可以使用pd.DataOffset

odate = pd.Timestamp('20191031')
odate
>> Timestamp('2019-10-31 00:00:00')

odate - pd.DateOffset(months=4)
>> Timestamp('2019-06-30 00:00:00')

odate + pd.DateOffset(months=4)
>> Timestamp('2020-02-29 00:00:00')

要将给定的期间列添加到“月末”:

odate = pd.Timestamp('20190531')
df['date'] = df.period.apply(lambda x: odate + pd.offsets.MonthEnd(x-1))
df
 period value   date
0   1   5.5     2019-05-31
1   2   5.0     2019-06-30
2   4   6.2     2019-08-31
3   3   5.0     2019-07-31
4   5   40.0    2019-09-30
5   11  5.0     2020-03-31

要提高性能,请使用list-comprehension

df['date'] = [odate + pd.offsets.MonthEnd(period-1) for period in df.period]