如何从数据透视表中获取索引的小计

时间:2019-08-14 10:34:30

标签: python-3.x pandas

我需要更改数据框中子列(Bill2)的值格式

我使用数据透视表功能后获得以下输出

SELECT
    ISNULL(
        CONVERT(
            DECIMAL(10, 2),
            1.0 *
            (
                ISNULL(Value1, 0 ) + ISNULL( Value2, 0 ) + ISNULL( Value3, 0 ) 
            )
            /
            NULLIF(
                ISNULL(SIGN(ABS(Value1)),0) + ISNULL(SIGN(ABS(Value2)),0) + ISNULL(SIGN(ABS(Value3)),0)
            ,0 )
        ) ,
        COALESCE(Value1,Value2,Value3)
    )
FROM tblFloat


data_frame4 = data_frame4.swaplevel(0,1,axis = 1).sort_index(axis = 1)     
元组= [(a.strftime('%b-%y'),b)如果a!= data_frame4.columns中a,b的'All'else(a,b)]     
data_frame4.columns = pd.MultiIndex.from_tuples(tuples)

我的输出:

data_frame4 = pd.pivot_table(data_frame4, 
                             index=['PC','Geo'], 
                             values=['Bill1', 'Bill2'], 
                             columns=['Month'], 
                             fill_value=0)

我想要的输出:

           jan               Feb
        Bill1 Bill2     Bill1 Bill2     
PC Geo
A  Ind    1     1.28        1    1.28
B  US     1     1.28        1    1.28
C  Can    1     1.28        1    1.28

1 个答案:

答案 0 :(得分:1)

首先仅使用slicers选择Bill2列,然后使用formatDataFrame.applymap更改值,或者将值转换为字符串并在$之前加上:

idx = pd.IndexSlice
df.loc[:, idx[:, 'Bill2']] = df.loc[:, idx[:, 'Bill2']].applymap('${:,.2f}'.format)
#alternative
#df.loc[:, idx[:, 'Bill2']] = '$' + df.loc[:, idx[:, 'Bill2']].astype(str)
#alternative1
#df.loc[:, (slice(None), 'Bill2')] = '$' + df.loc[:, (slice(None), 'Bill2')].astype(str)
print (df)
    jan          Feb       
  Bill1  Bill2 Bill1  Bill2
A     1  $1.28     1  $1.28
B     1  $1.28     1  $1.28
C     1  $1.28     1  $1.28