Jak wybrać z obiektu DataFrame wiersze spelniajace dane kryterium

0

Hej mam obiekt DataFrame z 1000 wierszy i chcialbym wybrac tylko te wiersze dla ktorych wartosc kolumny 'strike jest rowna pewnym wartosciom. Proboje tak:

option_selection2 = calls[calls['strike'] == 300 or calls['strike'] == 400]

Ale dziala tylko jak usune wszystko po or, czyli tylko dla jednej wartosci. Jak to poprawic?

2
if option_selection2 := calls[calls['strike'] == 300 or calls[calls['strike'] == 400:
   option_selection2 = calls[calls['strike']
2

W pandas musisz używać operatorów & i | zamiast andi or, oraz wyrażenia muszą być zamknięte w nawiasy, bo jest problem z ewaluacją wyrażeń. No i używaj .loc

option_selection2 = calls.loc[(calls['strike'] == 300) | (calls['strike'] == 400)]
0

Super działa :D A wiecie może jak dodać do tabeli nowa kolumne ktorej wartosci beda srednia arytmetyczna dwoch pozostalych> Ten kod nie dziala:

option_selection['average_bid_ask']=(option_selection['bid']+option_selection['ask'])/2.
0

Ale wrzuć jaki wyjątek ci wywala i jakieś przykładowe dane...
Mi działa

df1 = pd.DataFrame({'A': [5, 0], 'B': [2, 4]})
df1['C'] = (df1['A'] + df1['B']) / 2

A| B | C

  • | -| -
    5 | 2 | 3.5
    0 | 4 | 2.0
0

Błąd:

<ipython-input-116-2775eff73100>:1: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  option_selection['average_bid_ask']=(option_selection['bid']+option_selection['ask'])/2.

Tak wglada tabela:

1

To nie błąd tylko ostrzeżenie. Poczytaj sobie w tym linku tam jest wyjaśnione o co chodzi. Generalnie powinno się to robić w ten sposób.

df1.loc[:, 'C'] = (df1['A'] + df1['B']) / 2

Czasami to ostrzeżenie wywala bezzasadnie i można to zignorować, albo wyłączyć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1