Eri*_*got 8 python multi-index pandas
使用MultiIndex创建Pandas数据帧时,级别似乎始终排序:
>>> pd.DataFrame([range(4)], columns=pd.MultiIndex.from_product([["b", "a"], [20, 10]]))
b a
20 10 20 10
0 0 1 2 3
>>> _.columns
MultiIndex(levels=[[u'a', u'b'], [10, 20]],
labels=[[1, 1, 0, 0], [1, 0, 1, 0]])
Run Code Online (Sandbox Code Playgroud)
(注意如何levels
排序.)这有保证吗?知道这一点可以帮助编写健壮的代码(因为我们可以依赖MultiIndices的简单属性).
我在文档中找不到任何保证(但这并不意味着它不可能存在!).
还有一些旧的例子(从2015年开始)显示了不同的行为,但是Pandas现在可能会提供关于级别排序的保证(就像Python 3.6提供字典中键的顺序保证一样)?
创建MultiIndex
usingfrom_product()
或from_arrays()
levels 时将进行排序,因为这两种方法都使用_factorize_from_iterables()
它返回排序的索引。
>> list(_factorize_from_iterables([["b", "a"], [20, 10]]))
[[array([1, 0], dtype=int8), array([1, 0], dtype=int8)],
[Index(['a', 'b'], dtype='object'), Int64Index([10, 20], dtype='int64')]]
Run Code Online (Sandbox Code Playgroud)
MultiIndex.from_tuples()
还将有排序级别,因为它from_arrays()
在内部使用。
但是,如果您MultiIndex
在未指定方法的情况下进行设置,则不会对级别进行排序。
>> midx = pd.MultiIndex(levels=[['b', 'a'], [20, 10]],
labels=[[0, 0, 1, 1], [0, 1, 0, 1]])
>> df = pd.DataFrame(np.random.randn(4,4), columns=midx)
>> df.columns
MultiIndex(levels=[['b', 'a'], [20, 10]],
labels=[[0, 0, 1, 1], [0, 1, 0, 1]])
Run Code Online (Sandbox Code Playgroud)
以上使用pandas
版本(2017年12月29日发布)并在版本(最新版本)0.22.0
上进行测试。0.23.4
归档时间: |
|
查看次数: |
147 次 |
最近记录: |