Igo*_*arm 4 python dataframe pandas pandas-groupby
我有一个数据集,我想在 groupby 之后对其进行采样。一般来说,可以通过 来实现df.groupby("some_id").sample(n=100)。但问题是,有些组的样本数少于 100 个(是的,replace=True 是一种选择,但如果我们想减少样本量怎么办,我的意思是,如果该组的样本数超过 100 个,我想采用 100 个样本量,如果更少 - 保持原样)。我找不到实现类似目标的例子,任何想法都值得赞赏。现在我唯一的想法就是忘记 groupby,创建组列表或类似的东西
groups_list=[]
for i in df.some_id.unique():
groups_list.append(df[df_some_id==i].apply(weird_sampling))
def weird_sampling(df):
if (df.shape[0]>99):
return df.sample(100)
return df
Run Code Online (Sandbox Code Playgroud)
但看起来效率极低
我认为最干净的答案可能是打乱数据,然后选择n每组中的最多:
# maximum number of elements in group
n = 100
# sample(frac=1) --> randomise the order
# groupby("some_id").head(n) --> select up to n
df.sample(frac=1).groupby("some_id").head(n)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1252 次 |
| 最近记录: |