Mam pandas.DataFrame z pomiarami wykonanymi w kolejnych punktach w czasie. Wraz z każdym pomiarem obserwowany system posiadał odrębny stan w każdym punkcie czasowym. Dlatego DataFrame zawiera również kolumnę ze stanem systemu przy każdym pomiarze. Zmiany stanu są znacznie wolniejsze niż interwał pomiaru. W rezultacie, kolumna wskazuje stany może wyglądać następująco (index: stan):Wyszukiwanie kolejnych segmentów w ramce danych pandy
1: 3
2: 3
3: 3
4: 3
5: 4
6: 4
7: 4
8: 4
9: 1
10: 1
11: 1
12: 1
13: 1
Czy istnieje prosty sposób pobrać indeksy każdego segmentu kolejno równych państw. Oznacza to, że chciałbym uzyskać coś takiego:
[[1,2,3,4], [5,6,7,8], [9,10,11,12,13]]
Wynik może być również w czymś innym niż zwykłe listy.
Jedyne rozwiązanie, o jakim mogłem myśleć, to ręczne powtarzanie wierszy, znajdowanie punktów zmiany segmentu i rekonstrukcja indeksów z tych punktów zmiany, ale mam nadzieję, że jest łatwiejsze rozwiązanie.
Zakłada się, że wartości nie powtarzają się w nieciągłych segmentach - na przykład 'DataFrame ([3] * 4 + [4] * 4 + [1] * 4 + [3] * 4, kolumny = ['A "])" umieści dwie grupy po 3 w tej samej grupie. Możesz skanować te z przerwami, ale to tylko kolejna wersja oryginalnego problemu. Być może istnieje sposób na to, aby pandy "groupby" zachowywały się bardziej jak "itertools.groupby". – DSM
Dzięki, twoje drugie rozwiązanie działa dobrze. Tak naprawdę mam sytuację opisaną przez DSM. – languitar
Jak można to zrobić, jeśli chcesz chcieć grupować według jakiegoś odchylenia (np. Grupy zawierają wartości, gdzie wszystkie wartości mieszczą się w przedziale -1 -1 sąsiednich wartości w oryginalnym zbiorze) – ryanjdillon