Sample each group after pandas groupby

前端 未结 2 561
感动是毒
感动是毒 2020-11-28 11:16

I know this must have been answered some where but I just could not find it.

Problem: Sample each group after groupby operation.



        
相关标签:
2条回答
  • 2020-11-28 11:23

    Apply a lambda and call sample with param frac:

    In [2]:
    df = pd.DataFrame({'a': [1,2,3,4,5,6,7],
                       'b': [1,1,1,0,0,0,0]})
    ​
    grouped = df.groupby('b')
    grouped.apply(lambda x: x.sample(frac=0.3))
    
    Out[2]:
         a  b
    b        
    0 6  7  0
    1 2  3  1
    
    0 讨论(0)
  • 2020-11-28 11:47

    pandas >= 1.1: GroupBy.sample

    This works like magic:

    # np.random.seed(0)
    df.groupby('b').sample(frac=.3) 
    
       a  b
    5  6  0
    0  1  1
    

    pandas <= 1.0.X

    You can use GroupBy.apply with sample. You do not need to use a lambda; apply accepts keyword arguments:

    df.groupby('b', group_keys=False).apply(pd.DataFrame.sample, frac=.3)
    
       a  b
    5  6  0
    0  1  1
    
    0 讨论(0)
提交回复
热议问题