72187


【質問文修正】  
「stock_a」と１つの変数を軸にした集計表の出力はできましたが、  
例えば「stock_a」「industry_a」等、複数の変数を同じレベルで並べた集計表の出力ができません。どのようなコードが適切でしょうか。

## コード

[code]

    import pandas as pd
    df = pd.DataFrame({
    'id':['id00001','id00002','id00003','id00004','id00005','id00006','id00007','id00008','id00009','id00010'],
    'size_a':[1,1,3,2,3,1,1,1,2,2],
    'stock_a':[2,1,2,2,2,2,2,2,2,2],
    'industry_a':[2,2,2,2,1,2,1,2,1,1]
    })
    print(df)
    
    print(pd.crosstab(index=df['size_a'],columns=df['stock_a']))
    
[/code]

## 出力結果

### 現在の結果

[code]

    stock_a   1   2
    size_a         
    1         3  49
    2         5  21
    3        13   6
    
[/code]

### 出力したい結果

[code]

    stock_a   1   2  industry_a   1   2
    size_a           size_a
    1         3  49  1           23  29
    2         5  21  2           12  14
    3        13   6  3            8  11
    
[/code]


CC BY-SA 4.0
2020-11-24T07:09:05.243
72177
2020-11-25T02:42:49.413
2020-11-25T01:38:23.393
42837
42837
question
python pandas numpy
クロス表で集計軸(columns)を水平方向に複数並べる方法。


もっとスマートな方法があると思いますが、こんな感じでステップを踏んでいけば出来ます。

[code]

    import pandas as pd
    df = pd.DataFrame({
    'id':['id00001','id00002','id00003','id00004','id00005','id00006','id00007','id00008','id00009','id00010'],
    'size_a':[1,1,3,2,3,1,1,1,2,2],
    'stock_a':[2,1,2,2,2,2,2,2,2,2],
    'industry_a':[2,2,2,2,1,2,1,2,1,1]
    })
    print(df)
    
    df1 = pd.crosstab(index=df['size_a'],columns=df['stock_a']).reset_index()
    print(df1)
    
    df2 = pd.crosstab(index=df['size_a'],columns=df['industry_a']).reset_index()
    print(df2)
    
    resultdf = pd.concat([df1,df2], axis=1, sort=False, join='outer', keys=['stock_a','industry_a'], names=['',''])
    print(resultdf)
    
[/code]

最後の結果はこうなります。

[code]

      stock_a       industry_a
       size_a  1  2     size_a  1  2
    0       1  1  4          1  1  4
    1       2  0  3          2  2  1
    2       3  0  2          3  1  1
    
[/code]


CC BY-SA 4.0
2020-11-25T02:42:49.413
72187
2020-11-25T02:42:49.413
26370
72177
answer