Set_codes в серии мультииндексированных панд

Я хочу мультииндексировать массив данных. Первоначально я индексировал свои данные с помощью даты и времени, но для некоторых более поздних приложений мне пришлось добавить еще один числовой индекс (который идет от 0 до len(array)-1).

Я написал эти маленькие строки:

O = [0.701733664614, 0.699495411782, 0.572129320819, 0.613315597684, 0.58079660603, 0.596638918579, 0.48453382119]
Ab = [datetime.datetime(2018, 12, 11, 14, 0), datetime.datetime(2018, 12, 21, 10, 0), datetime.datetime(2018, 12, 21, 14, 0), datetime.datetime(2019, 1, 1, 10, 0), datetime.datetime(2019, 1, 1, 14, 0), datetime.datetime(2019, 1, 11, 10, 0), datetime.datetime(2019, 1, 11, 14, 0)]
tst = pd.Series(O,index=Ab)
ld = len(tst)
index = pd.MultiIndex.from_product([(x for x in range(0,ld)),Ab], names=['id','dtime'])
print (index)
data = pd.Series(O,index=index)

Но при печати показатель я получаю странные «коды»: Уровни и имена идеальны, но коды идут от 0 до 763...764 раза (вместо одного)!

Я попытался добавить команду set_codes:

index.set_codes([x for x in range(0,ld)], level=0)
print (index)

Я зря, у меня следующая ошибка:

ValueError: Unequal code lengths: [764, 583696]

начальная серия панд:

печать (тст)

01.01.2005 14:00:00 0,544177

01.01.2005 14:00:00 0,544177

21.01.2005 14:00:00 0.602239

...

2019-05-21 10:00:00 0.446813

2019-05-21 14:00:00 0.466573

Длина: 764, dtype: float64

новый ожидаемый

идентификатор dtime

0 01-01-2005 14:00:00 0,544177

1 01.01.2005 14:00:00 0.544177

2 21-01-2005 14:00:00 0.602239

...

762 2019-05-21 10:00:00 0.446813

763 2019-05-21 14:00:00 0.466573

заранее спасибо

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
143
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете создать новый индекс с помощью MultiIndex.from_arrays и переназначить его на Series:

s.index = pd.MultiIndex.from_arrays([np.arange(len(s)), s.index], names=['id','dtime'])

еще один маленький вопрос, что мне делать, если я хочу получить доступ к определенной дате? Я просто могу получить последнее значение, например, так: s[0][0]

Nour 18.07.2019 12:55

@Nour - используйте Series.xs - например. s.xs('2005-01-01', level=1)

jezrael 18.07.2019 12:56

У меня есть это: идентификатор 759 0.570497 Я имею в виду, как я могу ввести какой-либо идентификатор и вернуть определенную дату. Извините, оговорился ^^'

Nour 18.07.2019 13:02

тогда используй print (s.loc[5].index[0])

jezrael 18.07.2019 13:04

что такое "s" в s.index? Откуда это пришло?

Boris 16.12.2019 11:51

@Boris - это сериал, вот tst

jezrael 16.12.2019 12:03

Другие вопросы по теме