我有一个包含多个层级的数据框,例如:
idx = pd.MultiIndex.from_product((['foo', 'bar'], ['one', 'five', 'three' 'four']),
names=['first', 'second'])
df = pd.DataFrame({'A': [np.nan, 12, np.nan, 11, 16, 12, 11, np.nan]}, index=idx).dropna().astype(int)
A
first second
foo five 12
four 11
bar one 16
five 12
three 11
我想使用索引级别标题为second
创建一个新列,以便我得到:
我想创建一个名为second
的新列,其数据来自索引级别。
A B
first second
foo five 12 five
four 11 four
bar one 16 one
five 12 five
three 11 three
我可以通过重置索引、复制列,然后重新应用来做到这一点,但那似乎更加繁琐。
我尝试过 df.index.levels[1]
,但它会创建一个排序列表,它不会保留顺序。
如果它是单个索引,我会使用 df.index
,但在多索引中,这将创建一个元组列。
如果此问题已在其他地方得到解决,请共享,因为我在搜索stackoverflow存档时没有找到任何解决方法。
df.index.get_level_values(level='second')
也可以使用。 - Alexanderdf.columns.get_level_values(level=1)
来完成相同的操作。 - Will Bryant