我有一个包含多个级别的数据框,例如:
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档案.
解决方法:
df['B'] = df.index.get_level_values(level=1) # Zero based indexing.
# df['B'] = df.index.get_level_values(level='second') # This also works.
>>> df
A B
first second
foo one 12 one
two 11 two
bar one 16 one
two 12 two
three 11 three
标签:multi-index,python,pandas 来源: https://codeday.me/bug/20190929/1832461.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。