df_final получает только 3 элемента, потому что он находится на том же уровне отступа, что и for ctr2 in weather
, поэтому он переназначается для каждого внешнего цикла.Хотя, если вы исправите это, вы получите фрейм данных, представляющий собой только один длинный столбец: к нему добавляется только один slope_list
, который в конце превращается в фрейм данных.
Вот как яможет решить эту проблему без изменения вашего метода назначения:
weather = np.linspace(-5, 5, 3)
slope_list = []
for ctr1 in weather:
X1 = round(ctr1,1)
for ctr2 in weather:
X2 = round(ctr2,1)
Y1 = regressor[0] * X1**3 + \
regressor[1] * X1**2 + \
regressor[2] * X1 + \
regressor[3]
Y2 = regressor[0] * X2**3 + \
regressor[1] * X2**2 + \
regressor[2] * X2 + \
regressor[3]
slope = (Y2-Y1)/(X2-X1)
slope_list.append(slope)
#make it 3 columns and 3 rows as intended
slope_list = np.array(slope_list).reshape(3, 3)
#make the dataframe
df_final = pd.DataFrame({X1:slope_list})
#manually add the desired row and column indexes
df_final = df.set_index(weather)
df_final.columns = weather
Хотя вы должны иметь в виду, что если вы не знаете точно, что делаете, создание циклов и вложенных циклов при работе с пандами обычно означает, что вы пропали без вестигораздо более легкий и лучший способ идти о вещах.