pandas DataFrame如何按年月分组后每组随机抽取10行存入新数据框
实现代码
方法1:高版本pandas(1.1.0+)最简写法
# 按年月分组,每组无放回随机抽取10行 sampled_df = df.groupby(df['daate'].dt.to_period('M')).sample( n=10, random_state=42, replace=False )
方法2:兼容所有pandas版本的写法
sampled_df = df.groupby(df['daate'].dt.to_period('M')).apply( lambda group: group.sample(n=10, random_state=42, replace=False) ).reset_index(drop=True)
参数说明
- 分组键
df['daate'].dt.to_period('M'):将datetime类型的日期列转换为年月周期值,相同年月的行会被分到同一组 n=10:指定每个分组抽取10行,你当前每个分组固定100行,完全满足抽样要求random_state=42:固定随机种子,可保证每次运行抽样结果一致,不需要复现结果可删除该参数replace=False:设置无放回抽样,避免同一分组内抽到重复行reset_index(drop=True):清除分组生成的冗余索引,最终得到的新DataFrame为连续索引
如果后续你的数据分组行数不固定,也可以把参数n=10替换为frac=0.1,代表每组固定抽取10%的行数。
内容的提问来源于stack exchange,提问作者MC2020
相关产品推荐
相关产品推荐

