如何从pandas DataFrame子集采样及指定行范围随机选行?
Pandas DataFrame 采样问题解决方案
嘿,针对你提出的两个pandas采样问题,我整理了实用的解决方法,直接上手就能用:
1. 如何从pandas DataFrame的一个子集中进行采样?
要从DataFrame的子集中采样,核心思路是先筛选出目标子集,再对这个子集调用sample()方法。
举个具体的例子:假设你有一个包含销售数据的DataFrame sales_df,想从"销售额大于1000"的子集中随机选5条数据,代码可以这么写:
# 第一步:筛选出目标子集 high_sales_subset = sales_df[sales_df['sales_amount'] > 1000] # 第二步:对子集进行随机采样(选5条) sampled_data = high_sales_subset.sample(n=5)
如果想按比例采样(比如取子集的10%),可以用frac参数:
sampled_data = high_sales_subset.sample(frac=0.1)
另外,如果需要保证每次采样结果一致(方便调试),可以设置random_state参数:
sampled_data = high_sales_subset.sample(n=5, random_state=42)
2. 如何从pandas DataFrame的第0行到(总行数-100)行之间随机选取一行?
你提到的sample(1)会选取任意行,要限定范围的话,我们可以先用iloc截取前总行数-100行,再对这个截取后的结果采样。
直接看代码示例:
# 获取DataFrame的总行数 total_rows = len(your_df) # 截取第0行到(总行数-100)行的范围 target_range = your_df.iloc[:total_rows - 100] # 从这个范围里随机选一行 start_state = target_range.sample(1)
也可以把它简化成一行代码:
start_state = your_df.iloc[:len(your_df)-100].sample(1)
这里解释一下:iloc[:n]会选取DataFrame中索引从0到n-1的行,所以total_rows - 100作为截止位置,刚好排除了最后100行,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Shamoon
相关产品推荐
相关产品推荐

