代码之家  ›  专栏  ›  技术社区  ›  Sushovan Mandal

熊猫数据帧多索引将多索引的一个级别转换为另一个轴,同时将另一个级别保持在原始轴中。

  •  0
  • Sushovan Mandal  · 技术社区  · 6 年前

    我在行索引器中有一个pandas dataframe with multiindex

    此数据框是由 groupby 操作的结果,然后从3级 多索引进行切片。我希望“日期”行索引器保持不变,但将行索引器的“slabtype”级别移入列索引器,其中不可用的值为 nan

    这就是我想说的:

    我需要做什么操作来实现这一点?另外,如果问题的标题可以改进,请建议这样。

    此数据帧是 groupby 操作,然后从3层切片 多指标 .I希望保留“日期”行索引器,但将行索引器的“slabType”级别移入列索引器,其中不可用的值为 NaN .

    这就是我想说的:

    enter image description here

    我需要做什么操作来实现这一点?另外,如果问题的标题可以改进,请建议这样做。

    2 回复  |  直到 6 年前
        1
  •  1
  •   jezrael    6 年前

    使用 unstack SlabLT 以下内容:

    print (df['SlabLT'].unstack())
    

    MultiIndex mean 以下内容:

    print (df.groupby(level=[0,1])['SlabLT'].mean().unstack())
    

    以下内容:

    df = pd.DataFrame({'date':['2017-10-01','2017-10-08','2017-10-08','2017-10-15', '2017-10-15'],
                       'SlabType':['UOM2','AMOUNT','UOM2','AMOUNT','AMOUNT'],
                       'SlabLT':[1,6000,1,6000,5000]}).set_index(['date','SlabType'])
    
    print (df)
                         SlabLT
    date       SlabType        
    2017-10-01 UOM2           1
    2017-10-08 AMOUNT      6000
               UOM2           1
    2017-10-15 AMOUNT      6000 <-duplicated MultiIndex '2017-10-15', 'AMOUNT'
               AMOUNT      5000 <-duplicated MultiIndex '2017-10-15', 'AMOUNT'
    
    print (df['SlabLT'].unstack())
    


    print (df.groupby(level=[0,1])['SlabLT'].mean())
    date        SlabType
    2017-10-01  UOM2           1
    2017-10-08  AMOUNT      6000
                UOM2           1
    2017-10-15  AMOUNT      5500
    Name: SlabLT, dtype: int64
    
    print (df.groupby(level=[0,1])['SlabLT'].mean().unstack())
    SlabType    AMOUNT  UOM2
    date                    
    2017-10-01     NaN   1.0
    2017-10-08  6000.0   1.0
    2017-10-15  5500.0   NaN
    
        2
  •  1
  •   Andy    6 年前

    既然你有 NaN pivot table

    df 'SlabLT' date SlabType

    df.reset_index().pivot_table(values = 'SlabLT', index = 'date', columns = 'SlabLT')