我写了一些pandas代码,它们在有数据时完全符合我的要求。但是,当没有数据时,代码会出错。事实证明groupby()
正在根据数据创建不同的索引类型。
以下是代码:
>>> import pandas as pd
>>> cols = ['a', 'b', 'c']
>>>
>>> a = pd.DataFrame(data=[[1,2,3]], columns=cols)
>>> b = pd.DataFrame(data=[], columns=cols)
>>>
>>> a.groupby(['a','b'])['c'].sum().index
MultiIndex(levels=[[1], [2]],
labels=[[0], [0]],
names=['a', 'b'])
>>> a.groupby(['a','b'])['c'].sum().index.get_level_values('a')
Int64Index([1], dtype='int64', name='a')
>>>
>>> b.groupby(['a','b'])['c'].sum().index
Index([], dtype='object')
>>> b.groupby(['a','b'])['c'].sum().index.get_level_values('a')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/cv/.virtualenvs/ts/lib/python3.5/site-packages/pandas/indexes/base.py", line 2214, in get_level_values
self._validate_index_level(level)
File "/cv/.virtualenvs/ts/lib/python3.5/site-packages/pandas/indexes/base.py", line 1325, in _validate_index_level
(level, self.name))
KeyError: 'Level a must be same as name (None)'
问题:
MultiIndex
,因为我明确地groupby()
了几列;为什么不创建MultiIndex
?groupby()
操作,导致MultiIndex
;我应该避免这样做吗?如果是这样,推荐的方法是什么?