熊猫添加更高级别的列多索引
Posted
技术标签:
【中文标题】熊猫添加更高级别的列多索引【英文标题】:pandas add higher level column multiindex 【发布时间】:2020-12-05 03:00:42 【问题描述】:我正在寻找一种在 pandas 中添加更高级别列索引的方法。
我有一个这样的多索引熊猫数据框:
>>>df
product A B C
sell_buy sell buy sell buy sell buy
group company
1 Bank X 100 50 200 10 20 20
2 Bank Y 20 40 150 40 30 20
3 Bank Z 100 20 20 10 40 10
我想在来自company
的列中添加更高级别的索引,并使用今天的日期设置行索引(使用类似datetime.today()
的东西)
company Bank X Bank Y Bank Z
product A B C A B C A B C
sell_buy sell buy sell buy sell buy sell buy sell buy sell buy sell buy sell buy sell buy
2020-08-15 100 50 200 10 20 20 20 40 150 40 30 20 100 20 20 10 40 10
我尝试了几次,但我不知道如何使它工作......
pd.MultiIndex.from_product([df.columns.levels, ['Bank X']])
pd.MultiIndex.from_product([df.columns.levels, ['product']])
任何帮助将不胜感激。谢谢!
【问题讨论】:
print (df.index[:3].tolist())
是什么?
它是[(1, 'Bank X'), (2, 'Bank Y'), (3, 'Bank Z')]
【参考方案1】:
我相信您需要在第一步将第一级转换为date
值,然后通过DataFrame.unstack
、MultiIndex.reorder_levels
和DataFrame.sort_index
重塑:
date = pd.Timestamp('today').floor('d')
df.index = pd.MultiIndex.from_product([[date], df.index.get_level_values(1)])
df = df.unstack().reorder_levels([2,0,1], axis=1).sort_index(axis=1)
print (df)
company Bank X Bank Y Bank Z \
product A B C A B C A
sell_buy buy sell buy sell buy sell buy sell buy sell buy sell buy
2020-08-15 50 100 10 200 20 20 40 20 40 150 20 30 20
company
product B C
sell_buy sell buy sell buy sell
2020-08-15 100 10 20 10 40
【讨论】:
再次感谢@jezrael!它非常适合我的需求。我需要更多地练习来处理这些多重指标..以上是关于熊猫添加更高级别的列多索引的主要内容,如果未能解决你的问题,请参考以下文章