Python-在列上具有多个索引的数据透视表

Bartek Nowakowski

我有一个简单的df,如下所示:

           ID     Provider  Single_Cost    Bundle_ID  Bundle_Cost
0      L_0001         P_01       1075.0          NaN          NaN
1      L_0002         P_02        590.0          NaN          NaN
2      L_0003         P_02       6900.0          NaN          NaN
3      L_0004         P_02        625.0          NaN          NaN
4      L_0005         P_02       5775.0          NaN          NaN
5      L_0006         P_02        495.0          NaN          NaN
6      L_0007         P_02        570.0          NaN          NaN
7      L_0008         P_02       1250.0          NaN          NaN
8      L_0009         P_03       2940.0       P_03_1       1470.0
9      L_0010         P_03       7608.0       P_03_1       7308.0

我需要对其进行转换以获取2级列:

  • 级别1:提供程序(提供程序的数量各不相同)
  • 级别2: Single_CostBundle_IDBundle_Cost(3个常数列的所有供应商)
     Provider  P_01                                 P_02                                 P_03
           ID  Single_Cost  Bundle_ID  Bundle_Cost  Single_Cost  Bundle_ID  Bundle_Cost  Single_Cost  Bundle_ID  Bundle_Cost
0      L_0001      1075.0         NaN          NaN          NaN       NaN           NaN          NaN       NaN           NaN
1      L_0002         NaN         NaN          NaN        590.0       NaN           NaN          NaN       NaN           NaN
2      L_0003         NaN         NaN          NaN       6900.0       NaN           NaN          NaN       NaN           NaN
3      L_0004         NaN         NaN          NaN        625.0       NaN           NaN          NaN       NaN           NaN
4      L_0005         NaN         NaN          NaN       5775.0       NaN           NaN          NaN       NaN           NaN
5      L_0006         NaN         NaN          NaN        495.0       NaN           NaN          NaN       NaN           NaN
6      L_0007         NaN         NaN          NaN        570.0       NaN           NaN          NaN       NaN           NaN
7      L_0008         NaN         NaN          NaN       1250.0       NaN           NaN          NaN       NaN           NaN
8      L_0009         NaN         NaN          NaN          NaN       NaN           NaN       2940.0    P_03_1        1470.0
9      L_0010         NaN         NaN          NaN          NaN       NaN           NaN       7608.0    P_03_1        7308.0

我认为可以在groupby之后合并2个数据帧以某种方式完成,但是我不确定如何开始。你能帮我吗?

耶斯列尔

使用经过修改的另一种解决方案,其中将2列传递至set_index,最后一个重置ID列并rename进行更正MultiIndex labels,在这里(Provider, ID)

df = (df.set_index(['ID','Provider'], append=True)
        .unstack()
        .swaplevel(1, 0, axis=1)
        .sort_index(axis=1)
        .reset_index(level=1)
        .rename_axis((None, None), axis=1)
        .rename(columns={'':'ID'})
        .rename(columns={'ID':'Provider'}, level=0))
print (df)
  Provider        P_01                              P_02            \
        ID Bundle_Cost Bundle_ID Single_Cost Bundle_Cost Bundle_ID   
0   L_0001         NaN       NaN      1075.0         NaN       NaN   
1   L_0002         NaN       NaN         NaN         NaN       NaN   
2   L_0003         NaN       NaN         NaN         NaN       NaN   
3   L_0004         NaN       NaN         NaN         NaN       NaN   
4   L_0005         NaN       NaN         NaN         NaN       NaN   
5   L_0006         NaN       NaN         NaN         NaN       NaN   
6   L_0007         NaN       NaN         NaN         NaN       NaN   
7   L_0008         NaN       NaN         NaN         NaN       NaN   
8   L_0009         NaN       NaN         NaN         NaN       NaN   
9   L_0010         NaN       NaN         NaN         NaN       NaN   

                     P_03                        
  Single_Cost Bundle_Cost Bundle_ID Single_Cost  
0         NaN         NaN       NaN         NaN  
1       590.0         NaN       NaN         NaN  
2      6900.0         NaN       NaN         NaN  
3       625.0         NaN       NaN         NaN  
4      5775.0         NaN       NaN         NaN  
5       495.0         NaN       NaN         NaN  
6       570.0         NaN       NaN         NaN  
7      1250.0         NaN       NaN         NaN  
8         NaN      1470.0    P_03_1      2940.0  
9         NaN      7308.0    P_03_1      7608.0  

另一个想法是创建元组并分配新的列,这里MultiIndexMultiIndex.from_tuples

df = (df.set_index(['ID','Provider'], append=True)
        .unstack()
        .swaplevel(1, 0, axis=1)
        .sort_index(axis=1)
        .reset_index(level=1)
        .rename_axis((None, None), axis=1))

mux = [('Provider', 'ID')] + df.columns.tolist()[1:]
df.columns = pd.MultiIndex.from_tuples(mux)

print (df)
  Provider        P_01                              P_02            \
        ID Bundle_Cost Bundle_ID Single_Cost Bundle_Cost Bundle_ID   
0   L_0001         NaN       NaN      1075.0         NaN       NaN   
1   L_0002         NaN       NaN         NaN         NaN       NaN   
2   L_0003         NaN       NaN         NaN         NaN       NaN   
3   L_0004         NaN       NaN         NaN         NaN       NaN   
4   L_0005         NaN       NaN         NaN         NaN       NaN   
5   L_0006         NaN       NaN         NaN         NaN       NaN   
6   L_0007         NaN       NaN         NaN         NaN       NaN   
7   L_0008         NaN       NaN         NaN         NaN       NaN   
8   L_0009         NaN       NaN         NaN         NaN       NaN   
9   L_0010         NaN       NaN         NaN         NaN       NaN   

                     P_03                        
  Single_Cost Bundle_Cost Bundle_ID Single_Cost  
0         NaN         NaN       NaN         NaN  
1       590.0         NaN       NaN         NaN  
2      6900.0         NaN       NaN         NaN  
3       625.0         NaN       NaN         NaN  
4      5775.0         NaN       NaN         NaN  
5       495.0         NaN       NaN         NaN  
6       570.0         NaN       NaN         NaN  
7      1250.0         NaN       NaN         NaN  
8         NaN      1470.0    P_03_1      2940.0  
9         NaN      7308.0    P_03_1      7608.0  

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

遍历python中具有相同索引位置的多个列表

来自分类Dev

熊猫python COUNTIF在具有多个条件的多个列上

来自分类Dev

Python Pandas多索引值无法在数据透视表中移动

来自分类Dev

具有多个值列的数据透视/交叉表

来自分类Dev

Python-如何在具有多个(2)索引的数据框中选择/删除元素

来自分类Dev

Python Pandas数据透视表-将计算列添加到多索引列

来自分类Dev

如何创建在具有重复条目的列上建立索引的数据透视表,这些条目应按另一列的值分组?

来自分类Dev

Python 3.6:创建数据透视表,汇总数据帧中多个列的值计数

来自分类Dev

如何将具有多个聚合字段和多个索引字段的pandas数据框旋转到python中的sumIfs?

来自分类Dev

在R中制作具有多个列的数据透视表

来自分类Dev

如何更改数据透视表中索引的编号(Python)

来自分类Dev

使用Python BeautifulSoup从具有多个相同名称表的特定页面提取数据表

来自分类Dev

具有多索引的Pandas子数据透视表和总数据透视表

来自分类Dev

python pandas在列上没有索引

来自分类Dev

带有多个索引的Pandas数据透视表小计

来自分类Dev

Python:具有groupby类别计数的数据透视表

来自分类Dev

在Python中将具有行/列索引的数据转换为表

来自分类Dev

在Python中的多个Excel工作表中创建具有相同名称的列的数据框

来自分类Dev

在python中使用熊猫访问数据透视表中的多索引值

来自分类Dev

如何在Python中将列与索引合并,例如数据透视表(请参见示例)

来自分类Dev

使用python的数据透视表

来自分类Dev

如何在python中为具有多个索引的数据框制作堆叠图?

来自分类Dev

如何创建在具有重复条目的列上建立索引的数据透视表,这些条目应按另一列的值分组?

来自分类Dev

多个列上的SQL Server数据透视表

来自分类Dev

Python Pandas中的堆叠/拆栈多索引数据透视表

来自分类Dev

遍历python数据透视表

来自分类Dev

复制具有多个列的数据透视表结果

来自分类Dev

在 Pandas Python 中使用多索引数据透视表对列值求和

来自分类Dev

在具有多个总和的多列上透视

Related 相关文章

  1. 1

    遍历python中具有相同索引位置的多个列表

  2. 2

    熊猫python COUNTIF在具有多个条件的多个列上

  3. 3

    Python Pandas多索引值无法在数据透视表中移动

  4. 4

    具有多个值列的数据透视/交叉表

  5. 5

    Python-如何在具有多个(2)索引的数据框中选择/删除元素

  6. 6

    Python Pandas数据透视表-将计算列添加到多索引列

  7. 7

    如何创建在具有重复条目的列上建立索引的数据透视表,这些条目应按另一列的值分组?

  8. 8

    Python 3.6:创建数据透视表,汇总数据帧中多个列的值计数

  9. 9

    如何将具有多个聚合字段和多个索引字段的pandas数据框旋转到python中的sumIfs?

  10. 10

    在R中制作具有多个列的数据透视表

  11. 11

    如何更改数据透视表中索引的编号(Python)

  12. 12

    使用Python BeautifulSoup从具有多个相同名称表的特定页面提取数据表

  13. 13

    具有多索引的Pandas子数据透视表和总数据透视表

  14. 14

    python pandas在列上没有索引

  15. 15

    带有多个索引的Pandas数据透视表小计

  16. 16

    Python:具有groupby类别计数的数据透视表

  17. 17

    在Python中将具有行/列索引的数据转换为表

  18. 18

    在Python中的多个Excel工作表中创建具有相同名称的列的数据框

  19. 19

    在python中使用熊猫访问数据透视表中的多索引值

  20. 20

    如何在Python中将列与索引合并,例如数据透视表(请参见示例)

  21. 21

    使用python的数据透视表

  22. 22

    如何在python中为具有多个索引的数据框制作堆叠图?

  23. 23

    如何创建在具有重复条目的列上建立索引的数据透视表,这些条目应按另一列的值分组?

  24. 24

    多个列上的SQL Server数据透视表

  25. 25

    Python Pandas中的堆叠/拆栈多索引数据透视表

  26. 26

    遍历python数据透视表

  27. 27

    复制具有多个列的数据透视表结果

  28. 28

    在 Pandas Python 中使用多索引数据透视表对列值求和

  29. 29

    在具有多个总和的多列上透视

热门标签

归档