如何将rangeindex作为多级索引中的一级添加?

时间:2019-05-07 06:58:26

标签: pandas

在熊猫中,我们可以添加一列,然后使用set_index使其成为索引级别。或者我们可以使用set_index([pd.RangeIndex(0, len(dataframe))], append=True),但是set_idnex不会按预期使用RangeIndex,它实际上将范围索引转换为int64数组。

# create example data frame
a = pd.DataFrame(data=pd.np.random.randint(0, 100000, size=(100, 3)), columns=['id1', 'id2', 'data'])
a.set_index(['id1', 'id2'], inplace=True)
# create example data frame done
a2.index.names
Out[74]: FrozenList(['id1', 'id2'])
#check the memory usage:
a2.memory_usage(deep=True)
Out[73]: 
Index    1904
data      800
dtype: int64
# the index is 2x int64 arrays
# now I try to append a new level of range index
b = a2.set_index([pd.RangeIndex(0,len(a2))], append=True)
b.index.names
Out[77]: FrozenList(['id1', 'id2', None])
b.memory_usage(deep=True)
Out[78]: 
Index    2820
data      800
dtype: int64
c = a2.set_index([pd.np.arange(0,len(a2))], append=True)
c.memory_usage(deep=True)
Out[80]: 
Index    2820
data      800
dtype: int64
# b and c are exactly the same. I cannot add rangeindex as level 2

我还发现即使追加其他索引级别也会导致rangeindex转换为普通索引:

d = a2.reset_index()
d.index
Out[82]: RangeIndex(start=0, stop=100, step=1)
d.set_index(['id1', 'id2'], append=True, inplace=True)
d.index.names
Out[84]: FrozenList([None, 'id1', 'id2'])
d.memory_usage(deep=True)
Out[85]: 
Index    2820
data      800
dtype: int64

这是否意味着在多级索引中没有范围索引?

0 个答案:

没有答案