熊猫添加更高级别的列多索引

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.unstackMultiIndex.reorder_levelsDataFrame.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!它非常适合我的需求。我需要更多地练习来处理这些多重指标..

以上是关于熊猫添加更高级别的列多索引的主要内容,如果未能解决你的问题,请参考以下文章

将列添加到熊猫数据框以进行多索引

熊猫列多索引中的缺失值

如何将多索引列转换为熊猫数据框的单索引列?

熊猫:重命名多索引df中的列标签

在写入Excel时,“解析”一个pandas多索引

基于列值和多索引的熊猫“countif”