2016-10-17 2 views
0

Ich habe eine Pandas df wie folgt aus:Wie konvertiere ich Datumsintervalle in den Datumsindex in Pandas?

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 

Wie kann ich die Datumsintervalle in einen Index verwandeln, nur das Jahr zu halten? Wie folgt aus:

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

Antwort

1

Mit set_index und reindex und ffill vorwärts Füllung fehlt Werte, können Sie

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 

Dann reindex von Datumsbereichen erhalten und weiterleiten ffill fehlende Werte.

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 
+0

nett. gut. – ComputerFellow

+0

nett in der Tat, Prost. – cJc

+0

@John Galt - Eine Sache, auf diese Weise werde ich nicht die Jahre 2001, 2002, 2003 und 2004 bekommen, die alle "rot" sein sollten. – cJc

1

Stellen Sie sicher, dass Ihre Datumsspalten sind Datetime-Objekte (Sie können sie konvertieren, wenn nicht pd.to_datetime(df['Date']) mit Ansonsten ist es einfach:.

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

Die Sache ist, dass ich keine 'Datum' Spalte habe, sondern 'Start' und 'Ende'. – cJc

Verwandte Themen