2017-01-30 3 views
0

у меня есть вложенное словарь наборов дат, dмультииндекс dataframe из вложенного словаря множеств

d= {"A": {'a': {datetime1, datetime2}, 'b': {datetime3}, 'c':{datetime4}, 
    "B": {'a': datetime5, datetime1, datetime3}} 

Я хочу панд DataFrame ф.р.

  dates 
A a datetime1 
      datetime2 
    b datetime3 
      ... 

Это может быть дубликатом вопрос Nested dictionary to multiindex dataframe where dictionary keys are column labels

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

df = pd.DataFrame.from_dict({(i, j): d[i][j] 
            for i in d.keys() 
            for j in d[i].keys()}, 
            orient='index') 

создает беспорядок тысяч целых чисел в виде столбцов (по одному на каждую дату, может быть?), И кортеж (I, J) в качестве единого индекса (вместо двух уровней индексов, я и j). Является ли проблема просто потому, что здесь у меня есть только один столбец в dataframe? Могу ли я иметь многоиндексную серию? Или я пропущу что-то очень очевидное?

ответ

2

Я думаю, что вы должны разделить dict на индексы и их данные, затем сделать pd.MultiIndex и pd.Series. Я работаю над примером, приведенным here, но слегка изменил ваш словарь.

index, series = zip(*[((i, j), d[i][j]) for i in d for j in d[i]]) 

index = pd.MultiIndex.from_tuples(index, names=['Captial', 'lowercase']) 
series = pd.Series(series, index=index) 
+0

Первая строка возвращает значение ValueError: слишком много значений для распаковки (ожидается 2) ". Можете ли вы предложить небольшую модификацию? –

+0

Я его отредактировал, попробуй сейчас –

+0

Ты, дорогой сэр, спасатель :) –