我有一个数据框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
答案 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