根据现有列值从 pandas 数据框中随机选择行子集

Randomly selecting a subset of rows from a pandas dataframe based on existing column values

我有一个包含多列的数据框,我想根据特定列的值随机 select 相同数量的行。我想过使用 df.groupby['...'] 但它没有用。这是一个例子:

假设我想随机 select 每个 GroupID 一行,我该如何实现?例如,假设我 select 每个 GroupID 一个随机行,结果将产生以下内容:

这样它就可以根据 GroupID 中的值输出一行。例如,假设行按 GroupID(从升序到降序)排序,然后 select 来自与 GroupID 1、2、3 相关的行的“n”行,依此类推。任何信息肯定会有帮助。

此外,如果我需要 select 每个 GroupID 的特定行数(假设 GroupID=100 为 1 行,GroupID=200 为 4 行,等等),有什么想法吗?

[更新] 我使用下面的推荐答案进行了较小的修改或扩展,以select使用以下方法为每个组选择特定的 n 值:

samples = []
values = [1,  1,  2, ...]
index = 0
for group in df.GroupID.unique():
    s = df.loc[df.GroupID== group].sample(n=values[index ]).reset_index(drop=True)
    samples.append(s)
    index = index + 1
    
sample = pd.concat(samples, axis=0)

希望这段代码对您有用

samples = []
for group in df.GroupID.unique():
    s = df.loc[df.GroupID== group].sample(n=1).reset_index(drop=True)
    samples.append(s)
    
sample = pd.concat(samples, axis=0)

代码将从该子组中获取每个 'GroupID' 和样本观察值。 您可以为所需样本连接子样本(使用一个 GroupID)。