Свертывание мультииндекса DataFrame для регрессии

У меня есть Multiindexed DataFrame, содержащий поясняющие переменные df и DataFrame, содержащие переменные отклика df_Y

# Create DataFrame for explanatory variables
np.arrays = [['foo', 'foo', 'foo', 'bar', 'bar', 'bar'], 
 [1, 2, 3, 1, 2, 3]]
df = pd.DataFrame(np.random.randn(6,2),
 index=pd.MultiIndex.from_tuples(zip(*np.arrays)),
 columns=['X1', 'X2'])

# Create DataFrame for response variables
df_Y = pd.DataFrame([1, 2, 3], columns=['Y'])

Я могу выполнить регрессию только на одном уровне DataFrame с индексом foo

df_X = df.ix['foo'] # using only 'foo'
reg = linear_model.Ridge().fit(df_X, df_Y)
reg.coef_

Проблема: Однако, поскольку переменные Y одинаковы для обоих уровней foo и bar, поэтому мы можем иметь в два раза больше образцов регрессии, если мы также включаем bar.

Каков наилучший способ переформатировать/свернуть/разложить многоуровневый DataFrame, чтобы мы могли использовать все данные для нашей регрессии? Другие уровни могут иметь меньшие строки, которые df_Y

Извините за запутанную формулировку, я не уверен в правильности терминов/фразировки

1 ответ

Первый индекс можно отбросить, а затем соединение будет работать:

df.index = df.index.drop_level()
df = df.join(df_Y)

licensed under cc by-sa 3.0 with attribution.