Pandas concat中的levels选项

11
df1 = DataFrame(np.arange(6).reshape(3, 2), index=['a', 'b', 'c'],
        columns=['one', 'two'])
df2 = DataFrame(5 + np.arange(4).reshape(2, 2), index=['a', 'c'],
        columns=['three', 'four'])

>>> df1
   one  two
a    0    1
b    2    3
c    4    5

>>> df2
   three  four
a      5     6
c      7     8


res = pd.concat([df1, df2], axis=1, levels=['level1', 'level2'],
        names=['upper', 'lower'])
>>> res
   one  two  three  four
a    0    1      5     6
b    2    3    NaN   NaN
c    4    5      7     8

我的问题是为什么上面的输出中没有显示级别和名称? 有没有真实的例子展示如何使用 levels 选项?

感谢您的时间和帮助

1个回答

8

这是一个非常有趣的问题。

我在SO上进行研究,但从未被使用过 :(

但在文档中有一个示例,并注意到:

是的,这相当晦涩,但实际上对于实现像GroupBy这样的东西是必要的,其中分类变量的顺序很重要。

此外,文档中还说:

levels:序列列表,默认为None。用于构建MultiIndex的特定级别(唯一值)。否则,它们将从键中推断出来。

因此,它向MultiIndex添加了新的级别:

res = pd.concat([df1, df2], axis=1,
                keys=['level1','level2'], 
                levels=[['level1', 'level2','level3']], 
                names=['upper', 'lower'])

print (res)
upper level1     level2     
lower    one two  three four
a          0   1    5.0  6.0
b          2   3    NaN  NaN
c          4   5    7.0  8.0

print (res.columns)
MultiIndex(levels=[['level1', 'level2', 'level3'], ['four', 'one', 'three', 'two']],
           labels=[[0, 0, 1, 1], [1, 3, 2, 0]],
           names=['upper', 'lower'])

没有参数levels的相同:

res = pd.concat([df1, df2], axis=1,
                keys=['level1','level2'], 
                names=['upper', 'lower'])

print (res)
upper level1     level2     
lower    one two  three four
a          0   1    5.0  6.0
b          2   3    NaN  NaN
c          4   5    7.0  8.0

print (res.columns)
MultiIndex(levels=[['level1', 'level2'], ['four', 'one', 'three', 'two']],
           labels=[[0, 0, 1, 1], [1, 3, 2, 0]],
           names=['upper', 'lower'])

感谢您的帮助。我无法理解如何解释print(res.columns)输出中的标签。这些值是如何产生的? - venkysmarty
我来解释一下 - 级别是MultiIndex的所有可能唯一值。标签将这些级别映射 - 因此,对于第一个级别['level1','level2','level3'],它被映射为[0, 0, 1, 1],输出为['level1','level1','level2','level2'] - jezrael
1
总之,keys 转到 MultiIndex 的值以标记结果连接中的每个 DataFrame - Justislav Bogevolnov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接