首页 > 解决方案 > 熊猫添加更高级别的列多索引

问题描述

我正在寻找一种在熊猫中添加更高级别的列索引的方法。

我有一个这样的多索引熊猫数据框:

>>>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']])

任何帮助,将不胜感激。谢谢!

标签: pythonpandaspivotmulti-index

解决方案


我相信您需要在第一步将第一级转换为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  

推荐阅读