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

基于Pandas随机抽取行数据N次生成新DataFrame

问题描述

现有如下DataFrame(df),其中2022年7-12月的val值未知(标记为?)。需从2019、2020、2021年对应7-12月的val值中,对每个缺失月份进行n次随机抽取,将每次抽取的结果保存为新的DataFrame。当n=5时,预期输出格式如下。

原始DataFrame:

index   month   team    year    val cum_val
0   1   celtics 2019    4   4
1   2   celtics 2019    9   13
2   3   celtics 2019    17  30
3   4   celtics 2019    4   34
4   5   celtics 2019    7   41
5   6   celtics 2019    8   49
6   7   celtics 2019    2   51
7   8   celtics 2019    5   56
8   9   celtics 2019    1   57
9   10  celtics 2019    0   57
10  11  celtics 2019    18  75
11  12  celtics 2019    16  91
12  1   celtics 2020    7   7
13  2   celtics 2020    18  25
14  3   celtics 2020    27  52
15  4   celtics 2020    4   56
16  5   celtics 2020    9   65
17  6   celtics 2020    13  78
18  7   celtics 2020    2   80
19  8   celtics 2020    2   82
20  9   celtics 2020    5   87
21  10  celtics 2020    3   90
22  11  celtics 2020    7   97
23  12  celtics 2020    7   104
24  1   celtics 2021    3   3
25  2   celtics 2021    4   7
26  3   celtics 2021    2   9
27  4   celtics 2021    21  30
28  5   celtics 2021    5   35
29  6   celtics 2021    8   43
30  7   celtics 2021    27  70
31  8   celtics 2021    11  81
32  9   celtics 2021    4   85
33  10  celtics 2021    3   88
34  11  celtics 2021    1   89
35  12  celtics 2021    9   98
36  1   celtics 2022    14  14
37  2   celtics 2022    5   19
38  3   celtics 2022    29  48
39  4   celtics 2022    9   57
40  5   celtics 2022    0   57
41  6   celtics 2022    28  85
42  7   celtics 2022    ?   85
43  8   celtics 2022    ?   85
44  9   celtics 2022    ?   85
45  10  celtics 2022    ?   85
46  11  celtics 2022    ?   85
47  12  celtics 2022    ?   85

n=5时预期输出:

month   n1  n2  n3  n4  n5
7       27  2   27  2   2
8       11  11  2   5   5
9        4  1   4   5   1
10       0  3   0   3   3
11      18  1   1   7   18
12      16  9   9   7   16
实现方法

使用Python的pandas和numpy库可以快速实现需求,步骤如下:

  1. 导入依赖库
import pandas as pd
import numpy as np
  1. 筛选数据源
    从原始DataFrame中提取2019-2021年7-12月的val数据,作为抽样的数据源:
# 筛选目标年份和月份的数据
source_data = df[(df['year'].isin([2019, 2020, 2021])) & (df['month'].between(7, 12))]
  1. 执行随机抽样
    按月份分组,对每个月份的val列进行n次随机抽取(采用放回抽样,因为抽取次数n可能大于每个月份的样本量):
n = 5  # 设置抽取次数
# 分组抽样,每组抽n个值并转置为列
sample_df = source_data.groupby('month')['val'].apply(lambda x: np.random.choice(x, size=n, replace=True)).unstack()
  1. 调整结果格式
    将列名改为n1到n5,并让month作为普通列(与预期输出一致):
# 重命名列
sample_df.columns = [f'n{i+1}' for i in range(n)]
# 重置索引,让month成为列
sample_df = sample_df.reset_index()

运行上述代码后,sample_df就是符合预期的结果DataFrame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 01:45:33