根据现有列值从 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)。
我有一个包含多列的数据框,我想根据特定列的值随机 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)。