如何根据数据选择不同的索引类型来处理Pandas组?

时间:2017-09-11 23:39:52

标签: python pandas dataframe pandas-groupby

我写了一些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)'

问题:

  • pandas用于选择索引类型的规则是什么?
  • 我希望pandas即使没有数据也可以创建MultiIndex,因为我明确地groupby()了几列;为什么不创建MultiIndex
  • 我的代码依赖于groupby()操作,导致MultiIndex;我应该避免这样做吗?如果是这样,推荐的方法是什么?

0 个答案:

没有答案