Как мне изменить индекс объекта фрейма данных pandas, чтобы не получать нулевые значения в записях фрейма данных?

#pandas

#pandas

Вопрос:

Кажется, я не знаю, в чем проблема, когда я объединил три фрейма данных в один и попытался изменить индекс объединенного фрейма данных. Вот что я сделал:

1) Сначала я объединил (или конкатенировал) три фрейма данных в «комбинированный» фрейм данных. Ниже приведен отрывок (‘TSP_JuMP_Obtained_Solu’) одного из трех. Индекс изменяется от 0 до 9 для всех трех имен данных, а также для объединенных.

введите описание изображения здесь

2) Затем я использовал следующую строку кода, чтобы объединить их:

 f_solu_tsp = pd.concat([list_TSP,list_Scenario1,list_Scenario2], axis=1, 
sort=True)
  

3) Впоследствии я использовал следующую строку кода для изменения индекса объединенного фрейма данных (df_solu_tsp):

 df_solu_tsp = df_solu_tsp.reindex(proTy_uniq_list)
  

ПРИМЕЧАНИЕ: ‘proTy_uniq_list’ — это список с членством, как показано ниже:

 [u'lau15', u'gr17', u'fri26', u'bays29', u'dantzig42', u'KATRINA_38', 
u'HARVEY_50', u'HARVEY_100', u'HARVEY_200', u'HARVEY_415']
  

Ниже приведен результат комбинированного фрейма данных (df_solu_tsp ):

введите описание изображения здесь

Заранее благодарю вас за помощь.

Комментарии:

1. Пожалуйста, добавьте пример фрейма данных, чтобы мы могли воспроизвести описанные вами шаги.

2. Если вы пытаетесь заменить целочисленный индекс пользовательским списком строк, это df_solu_tsp = df_solu_tsp.set_index(proTy_uniq_list) то, что вы ищете?

3. Спасибо, Пит. Это — df_solu_tsp = df_solu_tsp.set_index([proTy_uniq_list]) сработало.

Ответ №1:

Не имея примера DataFrame , я постараюсь ответить как можно лучше:

Решение 1

Как упоминал Питер Леймбиглер в комментариях:

 df_solu_tsp = df_solu_tsp.set_index(proTy_uniq_list)
  

Который заменяет ваш исходный индекс новым индексом, который в данном случае является списком равной длины.

Решение 2

Как упоминалось в pandas docs

 df_solu_tsp.set_index([pd.Index(proTy_uniq_list), 'proTy'])
  

Решение 3

Я вижу, что вы создаете фрейм данных из трех списков, поэтому мы можем сделать шаг назад и создать ваши данные за один раз:

 f_solu_tsp  = pd.DataFrame({'TSP_JuMP_Obtained_Solu': list_TSP,
                            'Scenario1': list_Scenario1,
                            'Scenario2': list_Scenario2}, index=proTy_uniq_list)
  

Пример решения 3

 data1 = ['hi', 'goodbye']
data2 = ['hello', 'bye']

idx = ['arriving', 'leaving']

df = pd.DataFrame({'column1': data1,
                   'column2': data2}, index=idx)

print(df)
          column1 column2
arriving       hi   hello
leaving   goodbye     bye