2013-07-20 13 views
5

załóżmy, że mam ramkę danych z indeksem jako miesięczny czas, wiem, że mogę używać dataframe.groupby(lambda x:x.year) do grupowania danych miesięcznych na rok i stosowania innych operacji. Czy jest jakiś sposób, abym mógł je szybko pogrupować, powiedzmy przez dekadę?panda rok kalendarzowy indeks roku przez dekadę

dzięki za wszelkie wskazówki.

Odpowiedz

15

Aby uzyskać dekadę można liczbami całkowitymi podzielić przez 10 lat, a następnie pomnożyć przez 10. Na przykład, jeśli począwszy od

>>> dates = pd.date_range('1/1/2001', periods=500, freq="M") 
>>> df = pd.DataFrame({"A": 5*np.arange(len(dates))+2}, index=dates) 
>>> df.head() 
      A 
2001-01-31 2 
2001-02-28 7 
2001-03-31 12 
2001-04-30 17 
2001-05-31 22 

Można grupować przez rok, jak zwykle (tutaj mamy DatetimeIndex więc to naprawdę łatwe):

>>> df.groupby(df.index.year).sum().head() 
     A 
2001 354 
2002 1074 
2003 1794 
2004 2514 
2005 3234 

czy można zrobić (x//10)*10 trick:

>>> df.groupby((df.index.year//10)*10).sum() 
      A 
2000 29106 
2010 100740 
2020 172740 
2030 244740 
2040 77424 

Jeśli nie masz czegoś, na którym możesz użyć numeru .year, nadal możesz wykonać numer lambda x: (x.year//10)*10).

4

Użyj atrybutu letnią index:

df.groupby(df.index.year)