kharuka2016のブログ

日々の出来事を書き留めておくブログ

pandas-indexの階層構造-

入門 Python 3

入門 Python 3

目次

前提条件

OS:Windows 10 64-bit, version 1607

Anaconda 4.4.0(Python 3.6 version 64-bit)インストール

NumPyのインストール

手順概要

1.コマンドプロンプトでIPython Notebookを起動します。

2.データの並び替えと順番

手順

1.コマンドプロンプトでIPython Notebookを起動します。

ipython notebook

2.データの並び替えと順番

2.1.numpy、panadasとpandasからSeriesとDataFrameをインポートします。

import numpy as np
from numpy.random import randn
import pandas as pd
from pandas import Series,DataFrame

2.2.Seriesを作成します。

ser=Series(randn(6),index=[[1,1,1,2,2,2],['a','b','c','a','b','c']])
ser

Out:

1  a   -1.345709
   b   -1.219113
   c    0.739873
2  a   -1.211379
   b    1.146896
   c    0.525995
dtype: float64

2.3.indexを表示します。

ser.index

Out:

MultiIndex(levels=[[1, 2], ['a', 'b', 'c']],
           labels=[[0, 0, 0, 1, 1, 1], [0, 1, 2, 0, 1, 2]])

f:id:kharuka2016:20170817155845p:plain

2.4.indexを指定してSeriesを表示します。

ser[1]

Out:

a   -1.345709
b   -1.219113
c    0.739873
dtype: float64

f:id:kharuka2016:20170817155851p:plain

2.5.2階層目のindexを指定してSriesを表示します。

ser[:,'a']

Out:

1   -1.345709
2   -1.211379
dtype: float64

2.6.unstackを用いてSeriesからDataFrameに変換します。

dframe=ser.unstack()
dframe

Out:

   a   b   c
1  -1.345709  -1.219113  0.739873
2  -1.211379  1.146896   0.525995

2.7.DataFrameからSeriesに変換します。

dframe.unstack()

Out:

a  1   -1.345709
   2   -1.211379
b  1   -1.219113
   2    1.146896
c  1    0.739873
   2    0.525995
dtype: float64

f:id:kharuka2016:20170817155856p:plain

2.8.転置してからDataFrameをSeriesに変換します。

dframe.T.unstack()

Out:

1  a   -1.345709
   b   -1.219113
   c    0.739873
2  a   -1.211379
   b    1.146896
   c    0.525995
dtype: float64

2.9.DataFrameを作成します。

dframe2=DataFrame(np.arange(16).reshape((4,4)),
index=[['a','a','b','b'],[1,2,1,2]],
columns=[['NY','NY','LA','SF'],['cold','hot','hot','cold']])
dframe2

Out:

       NY      LA  SF
        cold    hot hot cold
a   1  0  1  2  3
    2  4  5  6  7
b   1  8  9  10 11
    2  12 13 14 15

f:id:kharuka2016:20170817155901p:plain

2.10.indexに名前を付けます。

dframe2.index.names=['INDEX_1','INDEX_2']
dframe2

Out:

       NY      LA  SF
        cold    hot hot cold
INDEX_1 INDEX_2             
a   1  0  1  2  3
    2  4  5  6  7
b   1  8  9  10 11
    2  12 13 14 15

2.11.列に名前を付けます。

dframe2.columns.names=['Cities','Temp']
dframe2

Out:

Cities NY      LA  SF  
    Temp    cold    hot hot cold
INDEX_1 INDEX_2             
a   1  0  1  2  3
    2  4  5  6  7
b   1  8  9  10 11
    2  12 13 14 15

f:id:kharuka2016:20170817155907p:plain

2.12.列の階層を入れ替えます。

dframe2.swaplevel('Cities','Temp',axis=1)

Out:

   Temp    cold    hot     cold
    Cities  NY  NY  LA  SF
INDEX_1 INDEX_2             
a   1  0  1  2  3
    2  4  5  6  7
b   1  8  9  10 11
    2  12 13 14 15

f:id:kharuka2016:20170817155913p:plain

2.13.sortlevel(X)は非推奨のようです。sort_index(level=X)を使いましょう。

dframe2.sortlevel(1)

f:id:kharuka2016:20170817155832p:plain

2.14.2階層目でsortします。

dframe2.sort_index(level=1)

Out:

   Cities  NY      LA  SF
    Temp    cold    hot hot cold
INDEX_1 INDEX_2             
a   1  0  1  2  3
b   1  8  9  10 11
a   2  4  5  6  7
b   2  12 13 14 15

2.15.2階層目でsortし、1階層目でsortします。元のDataFrameに戻ったことが確認できましたでしょうか?

dframe2.sort_index(level=1).sort_index(level=0)

Out:

   Cities  NY      LA  SF
    Temp    cold    hot hot cold
INDEX_1 INDEX_2             
a   1  0  1  2  3
    2  4  5  6  7
b   1  8  9  10 11
    2  12 13 14 15

f:id:kharuka2016:20170817155836p:plain

2.16.列の名前と列(縦軸)を指定して和を求めます。

dframe2.sum(level='Temp',axis=1)

Out:

   Temp    cold    hot
INDEX_1 INDEX_2     
a   1  3  3
    2  11 11
b   1  19 19
    2  27 27

f:id:kharuka2016:20170817155841p:plain

Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎

Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎

参考:

udemy 実践Pythonデータサイエンス

www.udemy.com

Pythonスタートブック

Pythonスタートブック