2017-08-23 24 views
1

私は、特定の方法でデータセットをサンプリングする洗練された方法を模索しています。私はいくつかの解決策を見つけましたが、皆さんがより良い方法を知っているかどうか疑問に思っていました。私は、クラス1の場合と同様に、クラス0のためのインスタンスの同じ量を持っているように、その一例では、我々は5つのインスタンスを持っているの下に、私は私のデータセットを両立したいPython Pandasデータフレームのサンプリング

:ここ

は私が探していたタスクですクラス1とクラス0の11のインスタンスで:

 
id | class 
------ | ------ 
1 | 1 
1 | 0 
1 | 0 
1 | 0 
1 | 0 
2 | 1 
2 | 1 
2 | 0 
2 | 0 
2 | 0 
3 | 1 
3 | 1 
3 | 0 
3 | 0 
3 | 0 
3 | 0 

SOFAR私はクラス0のランダム6インスタンスを削除したが、私は1つのIDのすべてのインスタンスが削除されますことができることを防止したいと思います。私はsklearnで層別化した "分割"を試みましたが、すべてのIDに1つ以上の項目が含まれているわけではありません。希望の出力は次のようになります。

 
id | class 
------ | ------ 
1 | 1 
1 | 0 
2 | 1 
2 | 1 
2 | 0 
2 | 0 
3 | 1 
3 | 1 
3 | 0 
3 | 0 

良いアイデアはありますか?

答えて

0

各IDからランダムな行を1つ(保護されたデータフレームをそれらの行と別々のデータフレームを作成する)「保護」し、満足するまで元のデータフレームから削除する(保護されたデータフレームのクラスが並んでいる2つのデータフレームを連結しますか?

+0

ええ、Iそれについても考えましたが、パンダのサンプルメソッドとクラスとのバランスを取るためのファンシーウェイトを使用するエレガントな方法があることを期待していました。 – SirTobi

0

この私の心に来る:クラス1のデータセット のように行のclass0データセットと同じ量から

  1. テイククラス= 0の部分データセット
  2. のテイククラス= 1部
  3. データセットのサンプルを
  4. を連結

    DF0 = DF [DF [ 'クラス'] == 0]

    DF1 = DF [DF [ 'クラス'] == 1]

    df_strat = pd.concat([df0.sample(df1.shape [0])、DF1])

関連する問題