python pandas почему возникает ошибка (Key Error: 0) в dataframe

Рейтинг: 0Ответов: 1Опубликовано: 15.08.2023

Есть такой dataframe/временной ряд(валютной пары): https://dropmefiles.com/rQPKD

import pandas as pd


# чтение и подготовка данных
df = pd.read_csv('usdcad_H1_04_2023_support.csv', index_col=0, delimiter='\t', usecols=["time",'open', 'high', 'low', 'close'])
df.index = pd.to_datetime(df.index)
df_res = df.loc[df.index.to_series().between('2023-04-24 11:00:00', '2023-05-08 15:00:00')]

# далее/ниже хочу получить dataframe, где будут отфильтрованы значения 'close' выше определённого значения причем до первого неподходящего значения

# 1. проходит нормально для условия '< 1.35306'
df_new = df_res.groupby((df_res["close"] < 1.35306 ).cumsum()).get_group(0)
print(df_new)

# 2. не проходит для условия '< 1.35346'  -------------------- вызывает ошибку key_error: 0 !!!
# по сути в dataframe есть значения 'close' выше '1.35346' , не понимаю логику ошибки
df_new = df_res.groupby((df_res["close"] < 1.35346 ).cumsum()).get_group(0)
print(df_new)

Ответы

▲ 1Принят

Вы же берете группу по ключу. А ключ в группировке - это не порядковый номер, а значение, по которому происходит группировка. Очевидно, что группы с ключом 0 у вас в выборке нет, потому что первое же значение датафрейма удовлетворяет условию <1.35346, и ключ первой группы будет - 1.

Вы всегда можете проверить ключи и содержимое групп, если разложите группировку в явном виде:

for i, g in df_res.groupby((df_res["close"] < 1.35346 ).cumsum()):
    print(i)
    print(g)
1 <-Ключ
                        open     high      low    close
time                                                   
2023-04-24 11:00:00  1.35435  1.35522  1.35306  1.35308
2023-04-24 12:00:00  1.35308  1.35401  1.35224  1.35387
2023-04-24 13:00:00  1.35387  1.35449  1.35332  1.35427
2023-04-24 14:00:00  1.35425  1.35473  1.35341  1.35444
. . .