我想有一些更好的和自动的方式来做到这一点,但如果没有,那么这应该是一个体面的解决方法。首先,让我们建立了一些样本数据:
np.random.seed(479)
start_date = '2011-1-1'
df = pd.DataFrame({ 'date':np.random.choice(
pd.date_range(start_date, periods=365*5, freq='D'), 50) })
df['rel'] = df['date'] - pd.to_datetime(start_date)
df.rel = df.rel.astype('timedelta64[D]')
date rel
0 2014-06-06 1252
1 2011-10-26 298
2 2013-08-24 966
3 2014-09-25 1363
4 2011-12-23 356
正如你所看到的,“相对”仅仅是因为起始日天数。它本质上是一个整数,所以你真正需要做的就是相对于开始日期对它进行规范化。
df['year_as_float'] = pd.to_datetime(start_date).year + df.rel/365.
date rel year_as_float
0 2014-06-06 1252 2014.430137
1 2011-10-26 298 2011.816438
2 2013-08-24 966 2013.646575
3 2014-09-25 1363 2014.734247
4 2011-12-23 356 2011.975342
你需要稍微调整,对于日期没有启动一月1这也忽略任何闰年这实在不是一个实际的问题,如果你只是产生一个KDE情节超过5年,但取决于你可能想做什么,这可能很重要。
这里的情节
df['year_as_float']d.plot(kind='kde')

看看KDE-情节seaborn:http://stanford.edu/~mwaskom/software/seaborn/generated/seaborn.kdeplot.html – Moritz