【发布时间】:2017-03-06 22:15:29
【问题描述】:
我需要从 DataFrame 的索引中删除一个级别(按位置或名称)并使用新索引创建一个新的 DataFrame。问题是我最终有一个非唯一索引。
我查看了Remove a level from a pandas MultiIndex,但问题是,正如其中的答案所暗示的那样,使用 unique() 会减少数组的索引,而不会保留级别的名称。
除了使用unique(),然后通过将标签名称拼接到数组上来创建一个新的Index,还有更优雅的解决方案吗?
index = [np.array(['foo', 'foo', 'qux']), np.array(['a', 'b', 'a'])]
data = np.random.randn(3, 2)
columns = ["X", "Y"]
df = pd.DataFrame(data, index=index, columns=columns)
df.index.names = ["Level0", "Level1"]
print df
X Y
Level0 Level1
foo a -0.591649 0.831599
b 0.049961 -1.524291
qux a -0.100124 -1.059195
index2 = df.reset_index(level=1, drop=True).index
df2 = pd.DataFrame(index=index2)
print df2.loc[idx['foo'], :]
Empty DataFrame
Columns: []
Index: [foo, foo]
【问题讨论】: