我想在分配行之前使用 MultiIndex 创建一个空 DataFrame 。我已经发现空的DataFrame不喜欢动态分配MultiIndex,因此我在创建过程中将MultiIndex的名称设置为。但是,我不想分配级别,因为这将在以后完成。这是到目前为止我得到的最好的代码:
def empty_multiindex(names):
"""
Creates empty MultiIndex from a list of level names.
"""
return MultiIndex.from_tuples(tuples=[(None,) * len(names)], names=names)
这给了我
In [2]:
empty_multiindex(['one','two', 'three'])
Out[2]:
MultiIndex(levels=[[], [], []],
labels=[[-1, -1, -1], [-1, -1, -1], [-1, -1, -1]],
names=[u'one', u'two', u'three'])
和
In [3]:
DataFrame(index=empty_multiindex(['one','two', 'three']))
Out[3]:
one two three
NaN NaN NaN
好吧,这些NaN没有用。我以后可以轻松删除它们,但这显然是一个棘手的解决方案。任何人都有更好的?
最佳答案
解决方法是不使用标签。这对我来说很好:
>>> my_index = pd.MultiIndex(levels=[[],[],[]],
labels=[[],[],[]],
names=[u'one', u'two', u'three'])
>>> my_index
MultiIndex(levels=[[], [], []],
labels=[[], [], []],
names=[u'one', u'two', u'three'])
>>> my_columns = [u'alpha', u'beta']
>>> df = pd.DataFrame(index=my_index, columns=my_columns)
>>> df
Empty DataFrame
Columns: [alpha, beta]
Index: []
>>> df.loc[('apple','banana','cherry'),:] = [0.1, 0.2]
>>> df
alpha beta
one two three
apple banana cherry 0.1 0.2
希望有帮助!
关于python - 创建一个空的MultiIndex,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28289440/