我有一个叫"DF"的Pandas DF.我希望以这样的方式从总体中采样数据,即给定一个事件计数,N=100,列="Type",我希望以这样的方式打印该列中总共100行,即每种类型的事件分布是相等的.

SNo Type Difficulty
1 Single 5
2 Single 15
3 Single 4
4 Multiple 2
5 Multiple 14
6 None 7
7 None 4323

例如,如果我指定N=3,则输出必须为:

SNo Type Difficulty
1 Single 5
3 Multiple 4
6 None 7

如果对于数字N,某些类型的出现不符合最小分割,我可以随机增加另一个计数.

我想知道如何通过编程实现这一点.谢谢

推荐答案

使用groupby.sample(Pandas ≥ 1.1)N除以类型数.

NB. This assumes the N is a multiple of the number of types if you want a strict equality.

N = 3
N2 = N//df['Type'].nunique()

out = df.groupby('Type').sample(n=N2)

handling non multiple of the number of types

使用与上述相同的方法,用随机行(不包括已 Select 的行)完成到N.

N = 5
N2, R = divmod(N, df['Type'].nunique())

out = df.groupby('Type').sample(n=N2)

out = pd.concat([out, df.drop(out.index).sample(n=R)])

由于您仍有可能完成同一组的项目,如果您真的想确保从不同组进行采样,请将最后一步替换为:

out = pd.concat([out, df.drop(out.index).groupby('Type').sample(n=1).sample(n=R)]

输出示例:

   SNo      Type  Difficulty
4    5  Multiple          14
6    7      None        4323
2    3    Single           4
3    4  Multiple           2
5    6      None          14

Python相关问答推荐

跟踪我已从数组中 Select 的样本的最有效方法

在Pandas 日历中插入一行

如何在python polars中停止otherate(),当使用when()表达式时?

numpy卷积与有效

OR—Tools中CP—SAT求解器的IntVar设置值

把一个pandas文件夹从juyter笔记本放到堆栈溢出问题中的最快方法?

在vscode上使用Python虚拟环境时((env))

joblib:无法从父目录的另一个子文件夹加载转储模型

用渐近模计算含符号的矩阵乘法

什么是合并两个embrame的最佳方法,其中一个有日期范围,另一个有日期没有任何共享列?

从Windows Python脚本在WSL上运行Linux应用程序

在pandas数据框中计算相对体积比指标,并添加指标值作为新列

matplotlib + python foor loop

在matplotlib中使用不同大小的标记顶部添加批注

如何将数据帧中的timedelta转换为datetime

如何在Python中自动创建数字文件夹和正在进行的文件夹?

为什么我的scipy.optimize.minimize(method=";newton-cg";)函数停留在局部最大值上?

如何在Polars中创建条件增量列?

如果列包含空值,则PANAS查询不起作用

如何在不不断遇到ChromeDriver版本错误的情况下使用Selify?