Функция Pandas melt использует позиции индекса столбца, а не имена столбцов

#python #pandas #dataframe #melt

#python #pandas #фрейм данных #плавление

Вопрос:

Есть ли способ задать имена столбцов для аргументов в качестве index позиции столбца, а не имен столбцов? Каждый пример, который я вижу, написан с именами столбцов value_vars . Мне нужно использовать индекс столбца.

Например, вместо:

 df2 = pd.melt(df,value_vars=['asset1','asset2'])
  

Используя что-то похожее на:

 df2 = pd.melt(df,value_vars=[0,1])
  

Ответ №1:

Выберите имена столбцов путем индексации:

 df = pd.DataFrame({
        'asset1':list('acacac'),
         'asset2':[4]*6,
         'A':[7,8,9,4,2,3],
         'D':[1,3,5,7,1,0],
         'E':[5,3,6,9,2,4]
})



df2 = pd.melt(df,
              id_vars=df.columns[[0,1]],
              value_vars=df.columns[[2,3]], 
              var_name= 'c_name', 
              value_name='Value')
print (df2)

   asset1  asset2 c_name  Value
0       a       4      A      7
1       c       4      A      8
2       a       4      A      9
3       c       4      A      4
4       a       4      A      2
5       c       4      A      3
6       a       4      D      1
7       c       4      D      3
8       a       4      D      5
9       c       4      D      7
10      a       4      D      1
11      c       4      D      0
  

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

1. Спасибо, также, если мне нужно объявить один столбец для аргумента var_name, что мне делать? (Вместо ‘c_name’) df_par = df.melt(id_vars = df.columns[[0,1]], var_name= ‘c_name’, value_name=’Значение’)

2. @MerveDemirci — Как ты думаешь df2 = pd.melt(df,value_vars=df.columns[[0]]) ?

3. Да, я пробовал, но выдает ошибку типа: в masked_arith_op вызывает ошибку типа (type(y)) Ошибка типа: <класс ‘список’>

4. @MerveDemirci — But var_name является строкой для нового имени столбца, поэтому не может использоваться так

5. Да, вы правы, мне, конечно, нужно указать имя. Спасибо.