You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中对DataFrame分层随机抽样以保留分布?

可以实现,Pandas提供了分层抽样功能保留指定列的分布

你需要的是分层抽样(Stratified Sampling),Pandas通过groupby()结合sample()方法就能轻松实现,确保抽样后location和category的分布与原数据集大致一致。

方法1:多列交叉分层抽样(推荐)

要同时保留两列的分布,最准确的方式是把location和category的组合作为分层依据,对每个子组按相同比例抽样:

import pandas as pd

# 读取原数据
df = pd.read_parquet("~/dimension.parquet")

# 按location+category组合分层,抽取20%样本(frac可根据需求调整)
sampled_df = df.groupby(['location', 'category'], group_keys=False).sample(frac=0.2, random_state=42)

验证抽样后的分布

执行以下代码可确认抽样后两列的比例是否与原数据匹配:

# 查看抽样后的location分布比例
print("抽样后location分布:")
print(sampled_df.groupby('location')['location'].count().transform(lambda x: x/x.sum()))

# 查看抽样后的category分布比例
print("\n抽样后category分布:")
print(sampled_df.groupby('category')['category'].count().transform(lambda x: x/x.sum()))

其他可选方式

  • 若需要抽取固定数量的样本,将frac替换为n即可,比如每个子组抽取100条:
    sampled_df = df.groupby(['location', 'category'], group_keys=False).sample(n=100, random_state=42)
    
  • 若仅需保证单一列的分布(比如仅location),可只按该列分组抽样,但这种方式可能导致另一列的分布出现轻微偏移。

内容的提问来源于stack exchange,提问作者armin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 06:50:28