Python 如果只有年份,则构造DatetimeIndex

Python 如果只有年份,则构造DatetimeIndex,python,pandas,Python,Pandas,我有结构的数据 country year POP 606 Algeria 1966 12339.140 730 Algeria 1968 13146.267 793 Algeria 1969 13528.304 856 Algeria 1970 13931.846 924 Algeria 1971 14335.388 现在,我想根据年份(每年的差异)创建每个国家的第一个差异。如果不是因为时间间隔的问题,我会按照 df.sort(['cou

我有结构的数据

     country  year        POP
606  Algeria  1966  12339.140
730  Algeria  1968  13146.267
793  Algeria  1969  13528.304
856  Algeria  1970  13931.846
924  Algeria  1971  14335.388
现在,我想根据年份(每年的差异)创建每个国家的第一个差异。如果不是因为时间间隔的问题,我会按照

df.sort(['country', 'year']).set_index(['country', 'year']).diff()
相反,我想我必须先将
year
转换为\u datetime()
。有没有一种简单的方法可以从只包含年份的列中创建datetime?随着时间的推移,是否有一种更自然的方法来创造差异?

你可以这样做

df.set_index(df.year.map(lambda x: datetime.datetime(x, 1, 1)))
它使用了左开间隔的概念

另一种可能性是

df.set_index(df.year.map(pd.Period))

两者都返回同样定义良好的索引,在后一种情况下,您可能更喜欢
df.diff()
的输出,因为它实际上表示一年。

FYI,您也可以通过
pd.PeriodIndex(df.year,freq='Y')
创建索引。一个相关的跟进:
.diff()
不是相对于指数计算的:如果指数跳跃(比如)两年,计算结果不会除以二。没有内置的功能吗?
diff
就是其中的差别,如果你想要差商,你可以做
df.POP.diff()/pd.Series(df.index,index=df.index).diff()
<索引上的code>diff表示设置差异,因此必须首先将其转换为一个系列。