поиск альтернативы pandas.Panel [duplicate]

Во-первых, вам нужно иметь четкое представление о scope и поведении ключевого слова this в контексте scope.

this & amp; scope:


there are two types of scope in javascript. They are :

   1) Global Scope

   2) Function Scope

вкратце, глобальная область относится к объекту window.Variables, объявленные в глобальной области, доступны из любого места. С другой стороны, область функций находится внутри функции .variable, объявленный внутри функции, не может быть доступен из внешнего мира в обычном режиме. this ключевое слово в глобальной области относится к объекту window. Внутренняя функция this также относится к объекту window.So this всегда будет ссылаться на окно до тех пор, пока мы найдем способ манипулировать this, чтобы указать контекст по собственному выбору.

--------------------------------------------------------------------------------
-                                                                              -
-   Global Scope                                                               -
-   ( globally "this" refers to window object)                                 -     
-                                                                              -
-         function outer_function(callback){                                   -
-                                                                              -
-               // outer function scope                                        -
-               // inside outer function"this" keyword refers to window object -                                                                              -
-              callback() // "this" inside callback also refers window object  -

-         }                                                                    -
-                                                                              -
-         function callback_function(){                                        -
-                                                                              -
-                //  function to be passed as callback                         -
-                                                                              -
-                // here "THIS" refers to window object also                   -
-                                                                              -
-         }                                                                    -
-                                                                              -
-         outer_function(callback_function)                                    -
-         // invoke with callback                                              -
--------------------------------------------------------------------------------

Различные способы управления this внутри функций обратного вызова:

Здесь У меня есть функция-конструктор, называемая Person. Он имеет свойство, называемое name, и четыре метода, называемые sayNameVersion1, sayNameVersion2, sayNameVersion3, sayNameVersion4. Все четыре из них имеют одну конкретную задачу. Заберите обратный вызов и вызовите его. Обратный вызов имеет конкретную задачу, которая заключается в регистрации свойства имени экземпляра функции конструктора Person.

function Person(name){

    this.name = name

    this.sayNameVersion1 = function(callback){
        callback.bind(this)()
    }
    this.sayNameVersion2 = function(callback){
        callback()
    }

    this.sayNameVersion3 = function(callback){
        callback.call(this)
    }

    this.sayNameVersion4 = function(callback){
        callback.apply(this)
    }

}

function niceCallback(){

    // function to be used as callback

    var parentObject = this

    console.log(parentObject)

}

Теперь давайте создадим экземпляр из конструктора person и вызывать разные версии sayNameVersionX (X относится к 1,2,3,4) методу с niceCallback, чтобы увидеть, как много способов управления this внутри обратного вызова ссылаться на person.

var p1 = new Person('zami') // create an instance of Person constructor

bind:

Что нужно сделать, это создать новую функцию с ключевым словом this, установленным на предоставленное значение.

sayNameVersion1 и sayNameVersion2 используют bind для управления this функции обратного вызова.

this.sayNameVersion1 = function(callback){
    callback.bind(this)()
}
this.sayNameVersion2 = function(callback){
    callback()
}

сначала связывают this с обратным вызовом внутри самого метода. для второго обратного вызова передается связанный с ним объект.

p1.sayNameVersion1(niceCallback) // pass simply the callback and bind happens inside the sayNameVersion1 method

p1.sayNameVersion2(niceCallback.bind(p1)) // uses bind before passing callback

вызов:

first argument в call используется как функция this внутри функции, которая вызывается с call, прикрепленной к ней.

sayNameVersion3 использует call для управления this ], чтобы ссылаться на созданный нами объект person, а не на объект окна.

this.sayNameVersion3 = function(callback){
    callback.call(this)
}

и он называется следующим:

p1.sayNameVersion3(niceCallback)

apply:

Как и в call, первый аргумент apply относится к объекту, который будет обозначен ключевым словом this.

sayNameVersion4 использует apply для манипулирования this для обращения к объекту человека

this.sayNameVersion4 = function(callback){
    callback.apply(this)
}

, и он называется следующим. Просто передается обратный вызов,

p1.sayNameVersion4(niceCallback)

3
задан Cord Kaldemeyer 4 January 2016 в 12:51
поделиться

1 ответ

Ответ зависит от версии pandas, с которой вы работаете. С последними pandas (> = 0.17.0) вы действительно можете использовать ключевое слово level, чтобы указать для сортировки, какой уровень мультииндекса:

df = df.sort_index(level=0)

Но если у вас есть старший pandas (& lt; 0.17.0), это ключевое слово level еще не доступно, но вы можете использовать метод sortlevel:

df = df.sortlevel(level=0)

Но обратите внимание, что если вы хотите отсортировать все уровни, вам не нужно указывать ключевое слово level, и вы можете просто сделать:

df = df.sort_index()

Это будет работать как для последних, так и для старых версий панд.


Краткое описание этих изменений в API сортировки см. в http://pandas.pydata.org/pandas-docs/stable/whatsnew.html#changes-to-sorting-api

4
ответ дан joris 20 August 2018 в 16:26
поделиться
  • 1
    Виноват! Я работал над версией 0.16.2 и теперь обновлен до 0.17.1. Так что просто применить multindex_df.sort_index (inplace = True) достаточно, чтобы получить все функциональные возможности? Благодаря! – Cord Kaldemeyer 4 January 2016 в 14:32
  • 2
    Нарезка из упорядоченного индекса теперь вызывает ошибку: 1. «idx = pd.IndexSlice» 2. «subset = multindex_df.loc [idx [['el: DE22C'], ['el'], ['input'],:,:]] & quot; приводит к «KeyError:« MultiIndex Slicing »требует, чтобы индекс был полностью lexsorted tuple len (5), глубина lexsort (0) '& quot; – Cord Kaldemeyer 4 January 2016 в 14:50
  • 3
    Моя ошибка снова. Я забыл отсортировать индекс после воссоздания;) Спасибо вам большое! – Cord Kaldemeyer 4 January 2016 в 14:55
Другие вопросы по тегам:

Похожие вопросы: