在多索引数据框中添加新行作为标题

Posted

技术标签:

【中文标题】在多索引数据框中添加新行作为标题【英文标题】:Add new row as header in multiIndexed dataframe 【发布时间】:2021-09-23 03:36:32 【问题描述】:

我有一个数据框,其中包含天、年、a1、a2、b1 列。

我想以这种格式创建 excel

我尝试了多索引和数据透视表以这种格式创建标题。但无法以这种格式生成 o/p。

table = pd.pivot_table(df,  index=['days'],
                columns=['year'], fill_value=0)
print(table)

多索引

unique_kpis = df["year"].unique()
l = ['a1', 'a2', 'b1']
header = pd.MultiIndex.from_product([unique_kpis,
                                 l],
                                names=['year','days']).to_list()

输入数据:

['days': 1, 'year': 'A', 'a1': 1001, 'a2': 1002, 'b1': 45, 'days': 2, 'year': 'B', 'a1': 452, 'a2': 453, 'b1': 345, 'days': 3, 'year': 'A', 'a1': 1001, 'a2': 10, 'b1': 34, 'days': 4, 'year': 'B', 'a1': 3456, 'a2': 453, 'b1': 345, 'days': 5, 'year': 'A', 'a1': 1003, 'a2': 123, 'b1': 34, 'days': 6, 'year': 'B', 'a1': 3456, 'a2': 453, 'b1': 345]

【问题讨论】:

你能像文本一样转换输入数据吗? 请提供源代码:df.to_dict('records') @sammywemmy 添加了输入数据 【参考方案1】:

首先使用DataFrame.sort_index,然后为新级别创建元组:

print (df)
   days year  a1  a2  b1
0     1    A   4   5   4
1     2    A   7   5   4
2     1    B   8   2   0
3     2    B   9   5   1


table = pd.pivot_table(df,  index=['days'],
                columns=['year'], fill_value=0).sort_index(axis=1, level=1)

table.columns = pd.MultiIndex.from_tuples([(b, f'Total a[0].upper()', a) 
                                           for a, b in table.columns])
print (table)
           A                  B           
     Total A    Total B Total A    Total B
          a1 a2      b1      a1 a2      b1
days                                      
1          4  5       4       8  2       0
2          7  5       4       9  5       1

【讨论】:

以上是关于在多索引数据框中添加新行作为标题的主要内容,如果未能解决你的问题,请参考以下文章

将多索引数据帧的索引值提取为python中的简单列表

在缺少日期的多索引数据框中移动列

pandas:在多索引数据框中转换索引类型

如何从多索引数据框中选择两个元素

如何使用单个索引更新多索引数据框中的记录

在 pandas 数据框中使用多索引连接数据框