つまりなにしたの?
DataFrameからsampleでサンプリングしたあとに、サンプリングされなかったデータが欲しくなる時があって、
なんか毎回やり方を迷っているような気がするので、Blogにまとめた。
DataFrame.sampleはなにをしてくれる?
pandas.DataFrame.sample — pandas 0.23.0 documentation
DataFrameの各軸からランダムサンプルしたアイテムを返してくれる。
今回は行方向にサンプリングしたものを用意して、その後に、サンプリングされなかったもので構成されたDataFrameを作ることになる。
やってみる
インポートするもの
import pandas as pd import numpy as np
データを適当に生成する
15行を含むデータフレームを作った。
matrix = np.random.randn(15,4) df = pd.DataFrame(matrix) df 0 1 2 3 0 -0.012370 -0.274671 -0.930508 0.972102 1 -2.099942 1.328341 -2.377081 2.326975 2 1.630080 0.055528 0.362745 -0.896038 3 0.122022 0.470795 -0.457171 -1.648070 4 0.663907 0.894649 -0.497479 0.004766 5 0.308522 1.190905 -0.761326 1.118443 6 0.801674 -0.755612 0.651569 -1.053451 7 -0.455737 -0.293239 -0.349643 1.214102 8 0.784557 0.017958 -0.258733 0.997609 9 0.542039 -0.291529 -1.223037 -0.114576 10 0.334778 1.662823 -0.075536 -0.984745 11 -0.739992 -1.453896 -0.962448 0.135596 12 0.389174 -0.016670 -1.300436 0.793934 13 2.254354 0.724702 1.456981 0.563009 14 0.498791 -1.921853 0.291234 1.109138
サンプリングする
10データをサンプリングしてみた。
df_sample = df.sample(10) df_sample 0 1 2 3 3 0.122022 0.470795 -0.457171 -1.648070 1 -2.099942 1.328341 -2.377081 2.326975 13 2.254354 0.724702 1.456981 0.563009 12 0.389174 -0.016670 -1.300436 0.793934 8 0.784557 0.017958 -0.258733 0.997609 9 0.542039 -0.291529 -1.223037 -0.114576 2 1.630080 0.055528 0.362745 -0.896038 4 0.663907 0.894649 -0.497479 0.004766 0 -0.012370 -0.274671 -0.930508 0.972102 6 0.801674 -0.755612 0.651569 -1.053451
サンプリングしたデータ以外を要素としたデータフレームを作る
サンプリング結果がソートされていないので、わかりにくいかもしれないけど、
Index:5,7,10,11,14がのこっていれば良い。
サンプリングしたもののインデックスを消せばそれ以外がのこるのでdropを使った。
pandas.DataFrame.drop — pandas 0.23.0 documentation
df_not_sample = df.drop(df_sample.index) df_not_sample 0 1 2 3 5 0.308522 1.190905 -0.761326 1.118443 7 -0.455737 -0.293239 -0.349643 1.214102 10 0.334778 1.662823 -0.075536 -0.984745 11 -0.739992 -1.453896 -0.962448 0.135596 14 0.498791 -1.921853 0.291234 1.109138
やってみてどうだった?
あ、Dropでいいか!って2回なったので小ネタとしてBlogで供養することにした。