Python:如何从整数中获得两个月之间的差?

时间:2018-12-07 15:48:02

标签: python pandas datetime

我有一个数据框df,如下所示:

df
    A    NUM_YYYYMM
0   a     201605
1   b     201602
2   c     201603
3   d     201601

其中type(df['NUM_YYYYMM'])返回int。我想计算t0=201612与列df['NUM_YYYYMM']之间的月份差异。所以:

df
    A    NUM_YYYYMM   deltaT
0   a     201605        7
1   b     201602       10
2   c     201603        9
3   d     201601       11

2 个答案:

答案 0 :(得分:5)

将列to_datetime转换为to_period,然后转换为月份,然后从Period中减去t0

t0 = '201612'
t = pd.to_datetime(t0, format='%Y%m').to_period('m')

df['deltaT'] = t - pd.to_datetime(df['NUM_YYYYMM'], format='%Y%m').dt.to_period('m')
print (df)
   A  NUM_YYYYMM deltaT
0  a      201605      7
1  b      201602     10
2  c      201603      9
3  d      201601     11

如果可能,请更改t0的格式:

t = pd.Period('2016-12')
df['deltaT'] = t - pd.to_datetime(df['NUM_YYYYMM'], format='%Y%m').dt.to_period('m')

答案 1 :(得分:2)

您可以使用给定标准格式YYYYMM的整数和模除来定义自己的减法

def my_subtract(x, t0):
    return (t0//100 - x//100)*12 + (t0%100 - x%100)

df['deltaT'] = my_subtract(df.NUM_YYYYMM, 201612)

输出df

   A  NUM_YYYYMM  deltaT
0  a      201605       7
1  b      201602      10
2  c      201603       9
3  d      201601      11