在带有集合或列表的pandas多索引数据框架中应用

时间:2018-05-29 13:07:27

标签: python pandas multi-index

我正在尝试将集合存储在多索引数据框的某些列中:

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到列A只给出我想要的输出,但我也想在lambda函数中使用索引标签。应用之前的reset_index()可以解决它,但我更喜欢保留多索引。

有没有办法使用Dataframe.apply或允许访问lambda函数内的索引标签的类似函数来获取此输出?

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

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

使用列表而不是集合会产生相同的行为。

0 个答案:

没有答案