我有一个数据框
公司名称 | 成立于 |
---|---|
a | 2004-01-01 00:00:00 |
b | 2013-01-01 00:00:00 |
c | 2008-01-01 00:00:00 |
d | 1997-01-01 00:00:00 |
today = pd.Timestamp.now()
df["founded_on"]=pd.to_datetime(df["founded_on"])
df["Time_Since_founded_on"] = (today - df["founded_on"]).dt.days // 30
OverflowError:int64 加法溢出
我想知道每家公司已经营业了多少个月。
to_period('M')
转换:
df['Time_Since_founded_on'] = (pd.to_datetime(df['founded_on']).dt.to_period('M')
.rsub(pd.Timestamp('today').to_period('M'))
.apply(lambda x: x.n)
)
输出:
company_name founded_on Time_Since_founded_on
0 a 2004-01-01 00:00:00 242
1 b 2013-01-01 00:00:00 134
2 c 2008-01-01 00:00:00 194
3 d 1997-01-01 00:00:00 326
请注意,您原来的方法(使用天数)会在较大时期内给出不正确的值,因为月份并不完全等于 30D:
df['Time_Since_founded_on'] = (pd.to_datetime(df['founded_on'])
.rsub(pd.Timestamp('today'))
.dt.days.div(30)
)
company_name founded_on Time_Since_founded_on
0 a 2004-01-01 00:00:00 246.066667 # +4M
1 b 2013-01-01 00:00:00 136.466667 # +2M
2 c 2008-01-01 00:00:00 197.366667 # +3M
3 d 1997-01-01 00:00:00 331.266667 # +5M
更好(但不完美)的近似值是除以
365.25/12
。