Я работаю над большим фреймворком мультииндекса, который содержит несколько индексов, например. 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 в консолидированный?
все строки 'calc_function' то же самое? если это так, возможно, сначала вычислите его, затем «слейте» его в dataframe – maxymoo
Строки точно такие же для всех DataFrames, возвращаемых функцией calc_function (которые, в свою очередь, являются подмножествами DataFrame, которые сообщают о всех результатах) – Andreas
Я пытаюсь отредактируйте свой пример при построении index_result, но не достаточно символов: он должен читать '[['A'], периоды, классификация]' (а не '['A', периоды, классификация]'), потому что from_product использует списки. –