Я хочу выбрать и изменить значение ячейки dataframe. Для этого фрейма данных используются 2 индекса: «datetime» и «idx». Оба содержат метки, которые являются уникальными и последовательными. Индекс «datetime» имеет метку datetime типа datetime, а «idx» имеет целые знаковые метки.Нарезка и присвоение значений мультииндексированных данных для данных pandas из уникальных последовательных индексов
import numpy as np
import pandas as pd
dt = pd.date_range("2010-10-01 00:00:00", periods=5, freq='H')
d = {'datetime': dt, 'a': np.arange(len(dt))-1,'b':np.arange(len(dt))+1}
df = pd.DataFrame(data=d)
df.set_index(keys='datetime',inplace=True,drop=True)
df.sort_index(axis=0,level='datetime',ascending=False,inplace=True)
df.loc[:,'idx'] = np.arange(0, len(df),1)+5
df.set_index('idx',drop=True,inplace=True,append=True)
print(df)
'Вот dataframe:
a b
datetime idx
2010-10-01 04:00:00 5 3 5
2010-10-01 03:00:00 6 2 4
2010-10-01 02:00:00 7 1 3
2010-10-01 01:00:00 8 0 2
2010-10-01 00:00:00 9 -1 1
' Скажем, я хочу, чтобы получить строку, где IDX = 5. Как мне это сделать? Я мог бы использовать это:
print(df.iloc[0])
Тогда я получить результат ниже:
a 3
b 5
Name: (2010-10-01 04:00:00, 5), dtype: int32
Но я хочу, чтобы получить доступ и установить значение в этой ячейке, где IDX = 5, столбец = «а» , , указав значение idx и имя столбца 'a'. Как мне это сделать?
Прошу совета.
Если ваша проблема решена, подумайте о принятии ответа MaxU. Это гораздо более подробно. – MYGz
Хорошо, я принял ответ MaxU. Тем не менее, я думаю, что я поеду с вашим решением, поскольку я тестировал его быстрее (1,28 мс против 2,77 мс) и короче, без необходимости конвертировать целое число в строку, а затем конкатенировать строку «idx» для ввода в функцию eval. ..также, так как я буду использовать это для for-loops. – ConanG
Да. Поскольку xs не будет пересекать весь столбец для поиска значения idx. Он рассчитает хэш-значение 5 и выберет его в 1 раз. Другой индекс i.e индекс datetime слишком длинный для записи в нарезке: | – MYGz