title: How to generate a train-test-split based on a group id?
body: <p>I have the following data:</p>
  
  <pre><code>pd.DataFrame({'Group_ID':[1,1,1,2,2,2,3,4,5,5],
            'Item_id':[1,2,3,4,5,6,7,8,9,10],
            'Target': [0,0,1,0,1,1,0,0,0,1]})
  
     Group_ID Item_id Target
  0         1       1      0
  1         1       2      0
  2         1       3      1
  3         2       4      0
  4         2       5      1
  5         2       6      1
  6         3       7      0
  7         4       8      0
  8         5       9      0
  9         5      10      1
  </code></pre>
  
  <p>I need to split the dataset into a training and testing set based on the "Group_ID" so that 80% of the data goes into a training set and 20% into a test set. </p>
  
  <p>That is, I need my training set to look something like:</p>
  
  <pre><code>    Group_ID Item_id Target
  0          1       1      0
  1          1       2      0
  2          1       3      1
  3          2       4      0
  4          2       5      1
  5          2       6      1
  6          3       7      0
  7          4       8      0
  </code></pre>
  
  <p>And test set:</p>
  
  <pre><code>Test Set
     Group_ID Item_id Target
  8         5       9      0
  9         5      10      1
  </code></pre>
  
  <p>What would be the simplest way to do this? As far as I know, the standard test_train_split function in sklearn does not support splitting by groups in a way where I can also indicate the size of the split (e.g. 80/20).</p>