我想根据以下规则计算月差异向量到我给定的df:
Date1 Date2
12/31/2017 1/1/2018
12/31/2017 2/1/2018
12/31/2017 1/15/2018
逻辑如下:
列d1 :(日期1 + 1个月) - 日期2
栏d2 :(日期1 + 2个月) - 日期2
栏目d3 :(日期1 + 3个月) - 日期2等等......
输出结果为:
Date1 Date2 d1 d2 d3 ... d10
12/31/2017 1/1/2018 0 1 2 ... 9
12/31/2017 2/1/2018 -1 0 1 ... 8
12/31/2017 1/15/2018 0 1 2 ... 9
如果没有每次手动挑战每个d1,d2,d3,... d10,最好的方法是什么?
非常感谢!
答案 0 :(得分:2)
这是你需要的吗?(PS:你可以改变4到10会回馈你需要的东西)
#df.Date1=pd.to_datetime(df.Date1)
#df.Date2=pd.to_datetime(df.Date2)
d=dict(zip(np.arange(1,4).astype(str),((df.Date1.dt.to_period('M')-df.Date2.dt.to_period('M')).values[:,None]+np.arange(1,4)).T.tolist()))
df=df.assign(**d)
df
Out[1231]:
Date1 Date2 1 2 3
0 2017-12-31 2018-01-01 0 1 2
1 2017-12-31 2018-02-01 -1 0 1
2 2017-12-31 2018-01-15 0 1 2
我会推荐concat
v=pd.DataFrame((df.Date1.dt.to_period('M')-df.Date2.dt.to_period('M')).values[:,None]+np.arange(1,4),columns=np.arange(1,4).astype(str)).add_prefix('d')
pd.concat([df,v],1)
Out[1238]:
Date1 Date2 d1 d2 d3
0 2017-12-31 2018-01-01 0 1 2
1 2017-12-31 2018-02-01 -1 0 1
2 2017-12-31 2018-01-15 0 1 2
答案 1 :(得分:1)