Применять в многоиндексных фреймах данных панд с наборами или списками - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь сохранить наборы в некоторых столбцах мультииндексного фрейма данных:

In [1]:

    arrays = [['bar', 'bar', 'foo', 'foo'], ['one', 'two', 'one', 'two']]
    index = pd.MultiIndex.from_tuples(list(zip(*arrays)), 
                                      names=['first', 'second'])
    s = pd.DataFrame(np.arange(1, 9).reshape(4,2), 
                    index=index, columns=["A", "B"])

Out [1]: 
                  A  B
    first second      
    bar   one     1  2
          two     3  4
    foo   one     5  6
          two     7  8

Пытаясь использовать apply, чтобы получить наборы для одного из столбцов, я получаю фрейм данных с дублированиемзначения для каждого столбца:

In [2]: 
    s.apply(lambda x: set([x["A"]]), axis=1)

Out[2]: 
                    A    B
     first second          
     bar   one     {1}  {1}
           two     {3}  {3}
     foo   one     {5}  {5}
           two     {7}  {7}

Ожидаемый вывод:

Использование команды appply to column A дает только желаемый результат, но я также хотел бы использовать метки индекса внутри лямбда-функции,Метод reset_index () до применения может решить эту проблему, но я бы предпочел сохранить мультииндекс.

Есть ли способ получить этот вывод, используя Dataframe.apply или аналогичную функцию, которая позволяет получить доступ к меткам индекса внутри лямбда-функции?

In [3]:
     s["A"].apply(lambda x: set([x]))

Out [3]:
     first  second
     bar    one       {1}
            two       {3}
     foo    one       {5}
            two       {7}

Использование списков вместо наборов приводит к тому же поведению.

...