mam ten dataframe df
:pandy - GroupBy i filtrowania dla kolejnych wartości
U,Datetime
01,2015-01-01 20:00:00
01,2015-02-01 20:05:00
01,2015-04-01 21:00:00
01,2015-05-01 22:00:00
01,2015-07-01 22:05:00
02,2015-08-01 20:00:00
02,2015-09-01 21:00:00
02,2014-01-01 23:00:00
02,2014-02-01 22:05:00
02,2015-01-01 20:00:00
02,2014-03-01 21:00:00
03,2015-10-01 20:00:00
03,2015-11-01 21:00:00
03,2015-12-01 23:00:00
03,2015-01-01 22:05:00
03,2015-02-01 20:00:00
03,2015-05-01 21:00:00
03,2014-01-01 20:00:00
03,2014-02-01 21:00:00
wykonany przez U
i Datetime
obiektu. Chciałbym filtrować wartości U
z co najmniej trzema kolejnymi zdarzeniami w miesiącach/roku. Do tej pory mam pogrupowane według U
, year
i month
jak:
m = df.groupby(['U',df.index.year,df.index.month]).size()
uzyskania:
U
1 2015 1 1
2 1
4 1
5 1
7 1
2 2014 1 1
2 1
3 1
2015 1 1
8 1
9 1
3 2014 1 1
2 1
2015 1 1
2 1
5 1
10 1
11 1
12 1
Trzecia kolumna jest związana z występującymi w różnych miesiącach/rok. W tym przypadku tylko wartości U
02
i 03
zawierają co najmniej trzy kolejne wartości w miesiącach/roku. Teraz nie mogę się zorientować, w jaki sposób mogę wybrać tych użytkowników i na przykład je umieścić na liście lub po prostu zachować je w oryginalnej ramce danych df
i odrzucić pozostałe. Próbowałem też:
g = m.groupby(level=[0,1]).diff()
Ale nie mogę uzyskać żadnych przydatnych informacji.
Trudne .... I zaczął robić pewne postępy przez 'u = m.unstack ('U')'. Sztuczka polega na tym, że miesiące i lata nie mogą zawierać luk. '((u == u.shift (-1)) & (u == u.shift (-2))). any()' powie wtedy, które wartości miały trzy kolejne miesiące. – Alexander