67970


以下のようなデータがあります。

sample code:

[code]

    import pandas as pd
    
    arrays = [np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux']),
              np.array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two'])]
    
    s = pd.Series(np.random.randn(8), index=arrays)
    
    print(s)
    
[/code]

output:

[code]

    bar  one   -0.431204
         two   -0.476479
    baz  one   -0.758383
         two   -0.263379
    foo  one   -0.353537
         two   -0.202995
    qux  one   -0.774872
         two   -0.011614
    dtype: float64
    
[/code]

このデータを

[code]

        one    two
    bar -0.43  -047
    baz -0.75  -0.26
    foo ...    ...
    qux ...    ...
    
[/code]

のような形式にするためにはどうすればよいでしょうか？


CC BY-SA 4.0
2020-06-24T22:24:47.537
67968
2020-06-25T00:28:14.870
2020-06-25T00:28:14.870
3060
28294
question
python pandas
MultiindexなSeriesを表形式に変換する方法


`unstack(level=-1)`を使えば出来るでしょう。  
ちょうど類似の説明がドキュメントに書いてあります。  
[pandas.Series.unstack](https://pandas.pydata.org/pandas-
docs/stable/reference/api/pandas.Series.unstack.html)

質問内容に適用すれば以下のようになるでしょう。

[code]

    s = s.unstack(level=-1)
    
[/code]

結果

[code]

              one       two
    bar -0.431204 -0.476479
    baz -0.758383 -0.263379
    foo -0.353537 -0.202995
    qux -0.774872 -0.011614
    
[/code]

ちなみに何故かマイナスではない`(level=1)`でも同様の結果になるようです。  
そして`0`と`-2`が同じ結果で以下のようになり、`-3`と`2`はエラーになりました。

[code]

                bar       baz       foo       qux
    one   -0.431204 -0.758383 -0.353537 -0.774872
    two   -0.476479 -0.263379 -0.202995 -0.011614
    
[/code]

* * *

小数点以下の桁数を変更する場合、表示する値そのものの変更は`round()`等で、値は変えずに表示形式だけ変更するなら`display.float_format`で変えられるようです。  
[pandasで数値を丸める（四捨五入、偶数への丸め）](https://note.nkmk.me/python-pandas-round-
decimal/)  
[Pythonで小数・整数を四捨五入するroundとDecimal.quantize](https://note.nkmk.me/python-round-
decimal-quantize/)

[pandasの表示設定変更（小数点以下桁数、有効数字、最大行数・列数など）](https://note.nkmk.me/python-pandas-
option-display/)

ただし変更後の数値がどのようになるかは、それぞれの処理方法や指定によるでしょう。


CC BY-SA 4.0
2020-06-24T23:10:17.290
67970
2020-06-24T23:36:00.383
2020-06-24T23:36:00.383
26370
26370
67968
answer