计算月差异传染媒介的熊猫

时间:2018-01-25 01:36:46

标签: python pandas date-difference

我想根据以下规则计算月差异向量到我给定的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,最好的方法是什么?

非常感谢!

2 个答案:

答案 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)

以下是几天内给出的答案,因为您没有说明您希望如何整理月份。

from dateutil.relativedelta import relativedelta
for i in range(1,11):
    df["d{}".format(i)] = (df['Date1'].apply(lambda x: x + relativedelta(months=+i)) - df['Date2'])

这给你: enter image description here

相关问题