pandas.core.groupby.DataFrameGroupBy.sample#

DataFrameGroupBy.sample(n=None, frac=None, replace=False, weights=None, random_state=None)[源代码]#

为每个组返回一个随机样本。

您可以使用 random_state 来确保结果的可复现性。

Parameters:
nint, optional

为每个组返回的项数。不能与 frac 一起使用,并且不能大于最小组的大小,除非 replace 为 True。如果 frac 为 None,则默认为一。

fracfloat,可选

要返回的项的分数。不能与 n 一起使用。

replacebool,默认 False

允许或禁止同一行被抽样多次。

weights类列表,可选

默认的 None 导致平均概率加权。如果传入一个类列表,则值必须与底层 DataFrame 或 Series 对象具有相同的长度,并在组内标准化后用作采样概率。值必须是非负的,并且每个组中至少有一个正元素。

random_stateint, array-like, BitGenerator, np.random.RandomState, np.random.Generator, optional

如果是 int、array-like 或 BitGenerator,则为随机数生成器的种子。如果是 np.random.RandomState 或 np.random.Generator,则按给定的使用。

在 1.4.0 版本发生变更: 现在接受 np.random.Generator 对象

Returns:
Series 或 DataFrame

一个与调用者相同类型的新对象,包含从调用对象中随机采样的项(在每个组内)。

参见

DataFrame.sample

从 DataFrame 对象生成随机样本。

numpy.random.choice

从给定的 1-D numpy 数组生成随机样本。

Examples

>>> df = pd.DataFrame(
...     {"a": ["red"] * 2 + ["blue"] * 2 + ["black"] * 2, "b": range(6)}
... )
>>> df
       a  b
0    red  0
1    red  1
2   blue  2
3   blue  3
4  black  4
5  black  5

为列 a 中的每个不同值随机选择一行。random_state 参数可用于保证可复现性:

>>> df.groupby("a").sample(n=1, random_state=1)
       a  b
4  black  4
2   blue  2
1    red  1

frac 设置为采样固定比例而不是计数:

>>> df.groupby("a")["b"].sample(frac=0.5, random_state=2)
5    5
2    2
0    0
Name: b, dtype: int64

通过设置权重来控制组内的采样概率:

>>> df.groupby("a").sample(
...     n=1,
...     weights=[1, 1, 1, 0, 0, 1],
...     random_state=1,
... )
       a  b
5  black  5
2   blue  2
0    red  0