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
我的问题是为什么级别和名称没有显示在上面的res输出中?如何使用level选项的任何真实示例?
感谢您的时间和帮助
答案 0 :(得分:4)
非常有趣的问题。
我在SO进行研究,但从未使用过:(
但在docs中有一个注意事项的样本:
是的,这是相当深奥的,但实际上对于实现分类变量的顺序有意义的
GroupBy
这样的事情是必要的。
同样docs
说:
级别:序列列表,默认为无。用于构造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'])