set_index не индексируется в пандах

Для простой программы ниже я ожидал, что 2-й вывод будет таким же, как и первый.

Почему этого не происходит?

Это просто изменение порядка в data1 и data2

columnList = ["PID", "Sec", "Util", "random"]

data1 = [('67123', 12, '85' , '100'),  
         ('67123', 112, '15', '100'),
         ('87878', 23, "95", '100'), 
        ]

df1 = pd.DataFrame(data1, columns=columnList)
df1 = df1.set_index(["PID", "Sec"])
print df1

         Util random

PID   Sec            

67123 12    85    100

      112   15    100

87878 23    95    100
data2 = [('67123', 12, '85' , '100'),  
         ('87878', 23, "95", '100'), 
         ('67123', 112, '15', '100'),
        ]

df2 = pd.DataFrame(data2, columns=columnList)
df2 = df2.set_index(["PID", "Sec"])
print df2
          Util random

PID   Sec            

67123 12    85    100

87878 23    95    100

67123 112   15    100

person Nishant Sharma    schedule 12.03.2016    source источник


Ответы (1)


По умолчанию отображается Multiindex. Вы можете временно изменить его, установив параметр display.multi_sparse на False с помощью with.

Вариант: display.multi_sparse

По умолчанию: True

Функция: «разреженное» отображение MultiIndex (не отображать повторяющиеся элементы на внешних уровнях внутри групп).

Доступные параметры из Pandas.

#default options
#set temporary multi_sparse to True
with pd.option_context('display.multi_sparse', True):
    print df1
    
          Util random
PID   Sec            
67123 12    85    100
      112   15    100
87878 23    95    100
    
#same as
print df1    
    
          Util random
PID   Sec            
67123 12    85    100
      112   15    100
87878 23    95    100

#set temporary multi_sparse to False    
with pd.option_context('display.multi_sparse', False):
    print df1    
          Util random
PID   Sec            
67123 12    85    100
67123 112   15    100
87878 23    95    100

Если вы хотите установить это, используйте:

 pd.set_option('display.multi_sparse', False)

И сброс:

pd.reset_option('multi_sparse')
person jezrael    schedule 12.03.2016
comment
Я установил параметр как: pd.set_option('display.multi_sparse', False) И он по-прежнему показывает 2 строки в столбце PID для 67213, который, как я ожидал, будет только в одной строке и 2 строках в столбце Sec, соответствующем 67213 - person Nishant Sharma; 13.03.2016
comment
Он показывает тот же вывод с: with pd.option_context('display.multi_sparse', True): print df1 и with pd.option_context('display.multi_sparse', False): print df1 ? - person jezrael; 13.03.2016
comment
При значении False оба вывода показывают плоские строки. При значении True только первый вывод отображается как сгруппированный вид, тогда как второй всегда является ПЛОСКИМ. Я вижу это в Юпитере - person Nishant Sharma; 13.03.2016
comment
Я думаю, что это желаемый результат. Это правильно, потому что разница только в отображении DataFrames с повторяющимися значениями в Multiindex. А display.multi_sparse задал два режима отображения - с показом повторяющихся значений в Multiindex по False и с hiding повторением 2-го, 3-го, .. значений по False. Может быть, я не очень ясно объяснил это раньше, извините. - person jezrael; 13.03.2016