10

假设我有一个DataFrame带有 MultiIndex 的 df 并且它的级别为 L。

有没有办法从索引中删除 L 并再次添加它?

df = df.index.drop('L')从 DataFrame 中完全删除 L (与df= df.reset_index()具有 drop 参数不同)。我当然可以df = df.reset_index().set_index(everything_but_L, inplace=True)

现在,让我们假设索引包含除 L 之外的所有内容,并且我想添加 L。 df.index.insert(0, df.L)不起作用。同样,我当然可以打电话df= df.reset_index().set_index(everything_including_L, inplace=True),但感觉不对。

为什么我需要这个?由于索引不必是唯一的,因此我可能想添加一个新列,以便索引变得唯一。在拆分数据后一级索引不再包含任何信息的情况下,删除可能很有用(比如我的索引是 A,B 并且我在 A=x 的 df 上进行操作,但我不想丢失会发生的 A使用 index.droplevel('A'))。

4

1 回答 1

17

在当前版本 (0.17.1) 中,可以

df.set_index(column_to_add, append=True, inplace=True)

df.reset_index(level=column_to_remove_from_index).

与重置 n 列然后将 n+1 添加到索引相比,这带来了显着的加速。

于 2012-07-17T08:34:29.440 回答