Próbuję zostawić tylko wiersze w ramce danych, które są najnowsze z każdego roku (od 2000 do 2018), a następnie przekonwertować datę z dd-mm-rrrr na tylko numer roku.

Do tej pory zaimportowałem tylko dane:

df_spx = web.DataReader('^GSPC', 'yahoo', start='2000', end='2018')
df_spx.reset_index(inplace=True)
df_spx['Date'] = pd.to_datetime(df_spx['Date'])
df_spx

A wynik jest taki (jako obraz w adresie URL, nie można jeszcze publikować zdjęć):

enter image description here

0
brankoo 24 styczeń 2022, 17:59
Zrób dobry przykład. Nie wpisuję tego obrazu do mojego tłumacza. Uwzględnij żądane dane wyjściowe. Maksymalnie pięć rzędów Jako kod wykonywalny lub z możliwością kopiowania i wklejania.
 – 
timgeb
24 styczeń 2022, 18:15
1
Dziękuję za opinie. Mam już odpowiedź poniżej, która zadziałała i poprawię moje pytania w przyszłości
 – 
Branislav Toman
24 styczeń 2022, 18:43
Wspaniale! Dziękuję!
 – 
timgeb
24 styczeń 2022, 18:45

1 odpowiedź

Najlepsza odpowiedź

Możesz uporządkować ramkę danych według kolumny „Data”.

Następnie w grupie zachowaj tylko wartość roku.

Na koniec możesz uzyskać najnowsze wiersze po zgrupowaniu ramki danych w następujący sposób:

import pandas as pd

# sample dataframe
df = pd.DataFrame({
    'Date': ['2000-01-03', '2000-01-04', '2018-12-19', '2018-12-18'],
    'High': [1, 2, 3, 4],
})

df['Date'] = pd.to_datetime(df['Date'])
df.sort_values(by=['Date'], inplace=True)  # order by Date
df['Date'] = df['Date'].dt.year  # already ordered by Date, then leave year only.

df = df.groupby('Date').tail(1)  # get latest row per year

print(df)
#   Date  High
#1  2000     2 # latest row per 2000 (2000-01-04)
#2  2018     3 # latest row per 2018 (2018-12-19)
0
Sangkeun Park 24 styczeń 2022, 18:19