如何在Pandas中将日期间隔转换为日期索引?

时间:2016-10-17 12:39:53

标签: python-3.x pandas

我有一个像这样的熊猫df:

color   start           end
red     01/01/1980  31/12/1982
blue    01/01/1983  31/12/1988
blue    01/01/1989  31/12/1995
red     01/01/1996  31/12/1997
blue    01/01/1998  31/12/1999
red     01/01/2000  31/12/2004

如何将日期间隔转换为索引,仅保留年份?像这样:

1980    red
1981    red
1982    red
1983    blue
1984    blue
.
.

2 个答案:

答案 0 :(得分:1)

确保您的日期列是日期时间对象(如果不使用pd.to_datetime(df['Date']),您可以转换它们。否则它只是:

df['Year'] = df['Date'].dt.year
df2 = df.set_index(['Year'])

答案 1 :(得分:1)

使用set_indexreindex以及ffill转发缺失值,您可以获得

In [319]: dff = df.set_index(pd.to_datetime(df['start']).dt.year)['color']

In [320]: dff
Out[320]:
start
1980     red
1983    blue
1989    blue
1996     red
1998    blue
2000     red
Name: color, dtype: object

然后reindex从日期范围开始,转发ffill个缺失值。

In [321]: dff.reindex(range(dff.index.min(), dff.index.max()+1)).ffill()
Out[321]:
start
1980     red
1981     red
1982     red
1983    blue
1984    blue
1985    blue
1986    blue
1987    blue
1988    blue
1989    blue
1990    blue
1991    blue
1992    blue
1993    blue
1994    blue
1995    blue
1996     red
1997     red
1998    blue
1999    blue
2000     red
Name: color, dtype: object