gpt4 book ai didi

python - 根据日期创建多个列

转载 作者:太空宇宙 更新时间:2023-11-04 02:09:01 25 4
gpt4 key购买 nike

我最近开始使用 pandas,在使用“date”进行测试期间,我发现了这个挑战。鉴于此数据框:

df = pd.DataFrame({'id': [123, 431, 652, 763, 234],
'时间':['8/1/2017', '6/1/2015', '7/1/2016', '9/1/2014', '12/1/2018']})

创建带有回溯日期列的新数据框如下所示:

    id        time       time1       time2       time3       time4      time5
0 123 2017-08-01 2017-07-01 2017-06-01 2017-05-01 2017-04-01 2017-03-01
1 431 2015-06-01 2015-05-01 2015-04-01 2015-03-01 2015-02-01 2015-01-01
2 652 2016-07-01 2016-06-01 2016-05-01 2016-04-01 2016-03-01 2016-02-01
3 763 2014-09-01 2014-08-01 2014-07-01 2014-06-01 2014-05-01 2014-04-01
4 234 2018-12-01 2018-11-01 2018-10-01 2018-09-01 2018-08-01 2018-07-01

我尝试使用这些代码:

df['time'] = pd.to_datetime(df['time'], errors='coerce') #Object to Date 
df['time1'] = df['time'] - pd.DateOffset(months=1)
df['time2'] = df['time'] - pd.DateOffset(months=2)
df['time3'] = df['time'] - pd.DateOffset(months=3)
df['time4'] = df['time'] - pd.DateOffset(months=4)
df['time5'] = df['time'] - pd.DateOffset(months=5)

有没有办法更快更有效地解决这个问题?我已经测试了几种创建回溯日期的方法。但是我不知道如何处理多列。因为如果数据需要回溯 24 个月,我必须(手动)复制和粘贴很多。

最佳答案

这是使用 date_rangeconcat 的一种方法

s=df.time.apply(lambda x : pd.date_range(end=x,periods =6,freq='MS')[::-1].tolist())
df=pd.concat([df,pd.DataFrame(s.tolist(),index=df.index).add_prefix('Time').iloc[:,1:]],axis=1)
df
id time Time1 Time2 Time3 Time4 Time5
0 123 2017-08-01 2017-07-01 2017-06-01 2017-05-01 2017-04-01 2017-03-01
1 431 2015-06-01 2015-05-01 2015-04-01 2015-03-01 2015-02-01 2015-01-01
2 652 2016-07-01 2016-06-01 2016-05-01 2016-04-01 2016-03-01 2016-02-01
3 763 2014-09-01 2014-08-01 2014-07-01 2014-06-01 2014-05-01 2014-04-01
4 234 2018-12-01 2018-11-01 2018-10-01 2018-09-01 2018-08-01 2018-07-01

关于python - 根据日期创建多个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54032552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com