python - 使用期间列将月份添加到数据框
问题描述
我正在寻找一个 %Y%m%d 日期列添加到我的数据框中,使用具有整数 1-32 的周期列,它表示从定义的环境变量“odate”开始的每月数据点(例如,如果 odate=20190531 那么周期 1 应该是 20190531,周期 2 应该是 20190630,等等)
我尝试定义一个字典,其中列中的句点数作为键,值是 odate + MonthEnd(period -1)
这很好用;但是,鉴于周期数的变化,我想改进代码以使其灵活。
是否有一个函数可以让我用第 1 期的日期填充日期列,然后在随后的月份结束后的日期?
示例数据集:
日期=20190531
period value
1 5.5
2 5
4 6.2
3 5
5 40
11 5
所需的数据集:
日期=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
解决方案
您可以使用pd.date_range()
:
pd.date_range(start = '2019-05-31', periods = 100,freq='M')
您可以根据需要更改总期间,这freq='M'
意味着月末频率
这是您可以用于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]
推荐阅读
- excel - 搜索第二个水平轴时忽略“On Error GoTo”
- jquery - 如何通过使用 jquery 将鼠标悬停在另一个 html 元素上来更改另一个 html 元素的可见性/不透明度?
- async-await - 异步/等待不起作用(javascript/DynamoDB)
- c# - 如何在 C# 中合并两个 Word 文档对象(不在文件系统级别)?
- c - 在 C 中处理 send e recv 错误
- c++ - 变量在循环中没有按预期变化
- javascript - 使用 ytdl-core 打印 YouTube 视频的标题顺序错误
- typescript - ngOnInit 在解析器数据准备好之前调用
- python - 使用 GitPython 读取 Git 操作的进度卡住了
- r - UseMethod(“cld”)中的错误:没有适用于“cld”的适用方法应用于类“c('emm_list','list')”的对象