2016-11-07 6 views
1

Я работаю над большим фреймворком мультииндекса, который содержит несколько индексов, например. segment, period и classification, а также несколько столбцов с результатами, например. Results1, Results2. DataFrame consolidated_df должен хранить все мои результаты расчета:Комбинация DataFrame

import pandas as pd 
import numpy as np 

segments = ['A', 'B', 'C'] 
periods = [1, 2] 
classification = ['x', 'y'] 

index_constr = pd.MultiIndex.from_product(
    [segments, periods, classification], 
    names=['Segment', 'Period', 'Classification']) 

consolidated_df = pd.DataFrame(np.nan, index=index_constr, 
             columns=['Results1', 'Results2']) 

print(consolidated_df) 

структура (большого DataFrame) выглядит следующим образом:

       Results1 Results2 
Segment Period Classification      
A  1  x     NaN  NaN 
       y     NaN  NaN 
     2  x     NaN  NaN 
       y     NaN  NaN 
B  1  x     NaN  NaN 
       y     NaN  NaN 
     2  x     NaN  NaN 
       y     NaN  NaN 
C  1  x     NaN  NaN 
       y     NaN  NaN 
     2  x     NaN  NaN 
       y     NaN  NaN 

Я бегу цикл по всем моим segments (A, B и C) для вычисления результатов (которые хранятся в столбцах DataFrame используя отдельную функцию calc_function.

Эта функция возвращает DataFrame, который имеет тот же формат, что и консолидированный DataFrame, за исключением того, что он просто сообщает один сегмент за раз (т. это фрагмент консолидированного DataFrame).

Пример:

index_result = pd.MultiIndex.from_product(
    [['A'], periods, classification], 
    names=['Segment', 'Period', 'Classification']) 

result_calc = pd.DataFrame(np.random.randn(4,2), index=index_result, 
    columns=['Results1', 'Results2']) 

print(result_calc) 

           Results1 Results2 
Segment Period Classification      
A  1  x    -1.568351 0.386250 
       y    0.679170 1.552551 
     2  x    -1.190928 -0.765319 
       y    3.254929 1.436295 

Я попытался использовать ниже подход, чтобы сохранить DataFrame результаты в сводном один, но не увенчались успехом:

for segment in segments: 
#calc_function returns a DataFrame that has the same structure as consolidated_df 
    consolidated_df.loc[idx[segment, :, :], :] = calc_function(segment) 

Есть ли способ легко интегрировать чем меньше DataFrame в консолидированный?

+0

все строки 'calc_function' то же самое? если это так, возможно, сначала вычислите его, затем «слейте» его в dataframe – maxymoo

+0

Строки точно такие же для всех DataFrames, возвращаемых функцией calc_function (которые, в свою очередь, являются подмножествами DataFrame, которые сообщают о всех результатах) – Andreas

+0

Я пытаюсь отредактируйте свой пример при построении index_result, но не достаточно символов: он должен читать '[['A'], периоды, классификация]' (а не '['A', периоды, классификация]'), потому что from_product использует списки. –

ответ

1

Использование вашего примера выше, как насчет consolidated_df.ix['A'] = result_calc?

(Это так же, как consolidated_df.ix['A', :, :] = result_calc)

print(consolidated_df) 

           Results1 Results2 
Segment Period Classification      
A  1  x    1.290466 0.228978 
       y    -0.276959 0.735192 
     2  x    0.757339 -0.787502 
       y    -0.609848 0.805773 
B  1  x     NaN  NaN 
       y     NaN  NaN 
     2  x     NaN  NaN 
       y     NaN  NaN 
C  1  x     NaN  NaN 
       y     NaN  NaN 
     2  x     NaN  NaN 
       y     NaN  NaN 

 Смежные вопросы

  • Нет связанных вопросов^_^