EnsekiTT Blog

EnsekiTTが書くブログです。

DataFrameからサンプリングしたあとの残りが欲しい時の話

つまりなにしたの?

DataFrameからsampleでサンプリングしたあとに、サンプリングされなかったデータが欲しくなる時があって、
なんか毎回やり方を迷っているような気がするので、Blogにまとめた。

f:id:ensekitt:20180606023300j:plain

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で供養することにした。

クリエイティブ・コモンズ・ライセンス
この 作品 は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。