Python 熊猫:获取多索引级别为系列
我有一个具有多个级别的数据帧,例如:Python 熊猫:获取多索引级别为系列,python,pandas,multi-index,Python,Pandas,Multi Index,我有一个具有多个级别的数据帧,例如: 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).dropn
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
的索引级别创建一个新列,以便
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归档文件时没有任何运气。如果您想使用索引名(而不是数字索引)获取索引列值,我可以借用@AlbertoGarcia Raboso的答案
df['B'] = idx.to_series().str[1]
请注意,这会给您一个仍然包含索引列的输出,正如问题所要求的,它是一个系列。这看起来像是一个重复的列
df.index.to_frame()['second']
(例如,用
df.index.to_frame()['second'][8]
询问第9个系列项目)是否可以按索引名执行?是的df.index.get_level_values(level='second')
也可以工作。如果多索引位于列之上,而不是使用df.columns.get_level_values(level=1)
的索引之上,则可以执行相同的操作。
df.index.to_frame()['second']