【Python】特定の値でデータフレームを分割する

データフレームを扱う時に、ある値を参照して、
データフレームを分割したいなという時があると思います。

今回はPythonでデータフレームを分割する際の方法をお伝えします。

Pandasに関しては

Pandasに関しては、こちらの書籍が非常に参考になります。

Pythonによるデータ分析入門 第2版 ―NumPy、pandasを使ったデータ処理

Pythonによるデータ分析入門 第2版 ―NumPy、pandasを使ったデータ処理

さて、本題の特定の値でデータフレームを分割する方法をご紹介します。

まずは、データフレームを作成しましょう。

#必要なパッケージのインポート           
import pandas as pd
import numpy as np
df = pd.DataFrame({ 'A' : 1.,
                        'B' : pd.Timestamp('20130102'),
                        'C' : pd.Series(1,index=list(range(4)),dtype='float32'),
                        'D' : np.array([3] * 4,dtype='int32'),
                        'E' : pd.Categorical(["test","train","test","train"]),
                        'F' : 'foo' })

作成されたデータフレームを確認
f:id:gotto50105010:20180613124516p:plain

分割するためのスクリプト

#E列の値を参照してデータフレームを分割する
grouped_df = df.groupby('E')

for col, split_df in grouped_df:
    print('split value : ',col)
    print(split_df)

出力結果

split value :  test
     A          B    C  D     E    F
0  1.0 2013-01-02  1.0  3  test  foo
2  1.0 2013-01-02  1.0  3  test  foo
split value :  train
     A          B    C  D      E    F
1  1.0 2013-01-02  1.0  3  train  foo
3  1.0 2013-01-02  1.0  3  train  foo

さて、どうでしょうか。
データフレームのE列の値(test, train)で、データフレームが分割されていることがわかります。
このようにある値を参照してデータフレームを分割したいときには、
GROUP BYとfor文を使うことで、分けることができます。