62

我知道这一定在某个地方得到了回答,但我就是找不到。

问题:在 groupby 操作后对每个组进行采样。

import pandas as pd

df = pd.DataFrame({'a': [1,2,3,4,5,6,7],
                   'b': [1,1,1,0,0,0,0]})

grouped = df.groupby('b')

# now sample from each group, e.g., I want 30% of each group
4

2 回答 2

76

应用 lambda 并sample使用 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
于 2016-04-03T20:10:28.223 回答
40

熊猫> = 1.1:GroupBy.sample

这就像魔术一样工作:

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

   a  b
5  6  0
0  1  1

熊猫 <= 1.0.X

您可以GroupBy.apply使用sample. 您不需要使用 lambda;apply接受关键字参数:

df.groupby('b', group_keys=False).apply(pd.DataFrame.sample, frac=.3)

   a  b
5  6  0
0  1  1
于 2019-07-01T19:49:25.637 回答