2014-10-22 4 views
5

Я пытаюсь преобразовать штабель, мультииндексированных данные кадра обратно в одиночных панд DATETIME индекса.Преобразовать панда многоиндексный для панд временной метки

Индекс моего оригинального данные рамных, т.е. до несколько индексации и разборок, выглядит следующим образом:

In [1]: df1_season.index 
Out [1]: 

<class 'pandas.tseries.index.DatetimeIndex'> 
[2013-05-01 02:00:00, ..., 2014-07-31 23:00:00] 
Length: 1472, Freq: None, Timezone: None 

я применить мульти-индексирование и Расшахтовочный таким образом я могу построить ежегодные данные друг на друга, как это:

df_sort = df1_season.groupby(lambda x: (x.year, x.month, x.day, x.hour)).agg(lambda s: s[-1]) 
df_sort.index = pd.MultiIndex.from_tuples(df_sort.index, names=['Y','M','D','H']) 
unstacked = df_sort.unstack('Y') 

Мой новый данных кадра в течение первых двух дней мая выглядит следующим образом:

In [2]: unstacked 
Out [2]: 

      temp  season   
Y  2013 2014 2013 2014 
M D H        
5 1 2 24.2 22.3 Summer Summer 
    8 24.1 22.3 Summer Summer 
    14 24.3 23.2 Summer Summer 
    20 24.6 23.2 Summer Summer 
    2 2 24.2 22.5 Summer Summer 
    8 24.8 22.2 Summer Summer 
    14 24.9 22.4 Summer Summer 
    20 24.9 22.8 Summer Summer 

736 rows × 4 columns 

Индекс для нового кадра данных, показанной выше теперь выглядит следующим образом:

In [2]: unstacked.index.values[0:8] 
Out [2]: 

array([(5, 1, 2), (5, 1, 8), (5, 1, 14), (5, 1, 20), (5, 2, 2), (5, 2, 8), (5, 2, 14), 
     (5, 2, 20], dtype=object) 

, который не производит очень хороший участок по отношению к xticks (крупных и мелких). Если я смогу преобразовать этот мультииндекс обратно в один индекс datetime pandas, используя только данные месяца, дня и часа, то майоры/малые тики будут построены автоматически, как хотелось бы (я думаю). Например:

текущее решение:

xticks = (5, 1, 2), (5, 1, 8) … (5, 2, 20) 

искомое решение:

xticks(major) = Day, Month (displayed as MAY 01, MAY 02 etc etc) 
xticks(minor) = Hour (displayed as 02h 08h … 20h) 
+0

Даже небольшой намек был бы весьма полезен. – roi3i3ie

+0

Как мне это сделать для некоторой поддержки? Есть несколько вопросов здесь в течение года без каких-либо ответов. – roi3i3ie

+0

Еще месяц? Все, что угодно, поможет ... – roi3i3ie

ответ

0
import pandas as pd 
import matplotlib.pyplot as plt 
from numpy.random import randn 

ts = pd.Series(randn(1000), index=pd.date_range('1/1/2000', periods=1000)) 
ts = ts.cumsum() 

plt.figure() 
for year in set(ts.index.year): 
    tmp = ts[str(year)].values 
    plt.plot(tmp, label = year) 
plt.legend() 
plt.show() 

Я думаю, что это лучший путь для достижения своей цели, чем повторной индексации. Как вы думаете?

+0

Эй, спасибо большое за ответ. Хорошо, я только что дал это. Да, это, по-видимому, гораздо более простой способ укладки/сортировки годовых данных друг на друга в один сюжет, поэтому спасибо за это. Однако это не решение вопроса. Вместо моих xticks, minor/major, которые кодируются в год (например, день месяца), теперь они просто разбиваются на произвольные фрагменты одиночных точек данных, масштабируя их от 0 до n-1, где n - число точек данных в моем измерении образец комплект. – roi3i3ie

+0

Правильно, я бы предположил, что в этот момент это манипуляция типом x_axis ... но я не могу понять, как именно это сделать. Не могли бы вы загрузить данные до csv где-нибудь, чтобы я мог поиграть с ним и, возможно, создать еще одну запись? Был бы лучшим термином для этого быть «Сезонность» - взять информацию из нескольких лет и построить их на одной оси Ян-Дек? Я не могу найти документацию о том, как это сделать, что удивительно для меня – EngineeredE

+0

Эй! Я был в отъезде, извините за задержку. Позвольте мне вернуться к вам. Я тоже получу csv. Да и на ваш вопрос. Это именно то, о чем идет речь. – roi3i3ie

1

Преобразование данных вперед и назад в пандах становится очень грязным, как вы, кажется, испытали. Моя рекомендация в целом относительно панд и индексирования - это никогда не устанавливать индекс, а копировать его в первую очередь. Убедитесь, что у вас есть столбец с индексом, поскольку pandas не разрешает все операции над индексом, а интенсивная настройка и сброс индекса могут привести к исчезновению столбцов.

TLDR; Не конвертируйте индекс назад. Сохраните копию.

+0

Это также относится к принципу «открыто/закрыто»: http://en.wikipedia.org/wiki/Open/closed_principle – firelynx