Próbuję obliczyć różnicę czasu między dwoma rzędami przy użyciu shift()
, ale otrzymuję nieoczekiwany błąd. Mogę brakować czegoś oczywistego
df['Delta'] = (df.index - df.index.shift(1))
To oświadczenie wytwarza ValueError: Cannot shift with no offset
. czego mi brakuje?
2 odpowiedzi
Dwie rzeczy:
- Jeśli masz datetimeindex,
shift
przesuwa dane z okresem czasu. Jeśli twój indeks nie ma częstotliwości, musisz podać, że do metody przesunięcia za pomocą słowa kluczowegofreq
(np.freq='s'
, aby przesłać dane o jedną sekundę) - Nie można wymyślić dwóch takich obiektów indeksu, jak daje Ci zestaw różnicowy: http://pandas.pydata.org/pandas-docs/stable/indexing.html#set-Operations-on-index-Objects
Jeśli po prostu chcesz różnicę między dwiema kolejnymi wartościami w indeksie, możesz użyć metody diff
(serii, trochę łatwiejsze niż zmiana i odmiana):
df['index_col'] = df.index
df['Delta'] = df['index_col'].diff()
Być może myląco, Series.Shift i Indeks.Shift nie rób tego samego , Ten ostatni jest on tylko znacząco zdefiniowany dla czasu. Prawdopodobnie najłatwiej dodać swój indeks jako kolumnę.
df['index_col'] = df.index
df['Delta']=(df['index_col'] - df['index_col'].shift(1))
Podobne pytania
Powiązane pytania
Nowe pytania
python
Python to wielozadaniowy, wielozadaniowy język programowania dynamicznie typowany. Został zaprojektowany tak, aby był szybki do nauczenia się, zrozumienia i użycia oraz wymuszania czystej i jednolitej składni. Należy pamiętać, że Python 2 oficjalnie nie jest obsługiwany od 01-01-2020. Mimo to, w przypadku pytań Pythona specyficznych dla wersji, dodaj znacznik [python-2.7] lub [python-3.x]. Korzystając z wariantu Pythona (np. Jython, PyPy) lub biblioteki (np. Pandas i NumPy), należy umieścić go w tagach.