python - 对 pandas 中的群体进行采样

标签 python python-3.x pandas

我有一个包含用户和 session 列的数据框,我想对 session 数进行随机采样,以便数据框包含每个用户的 N 个唯一 个 session 。 session 的顺序很重要,即必须保留每个 session 的“in”列。

例如,如果N=2并且我有:

        x      in            session_id    user_id
0     0.0     1.0     trn-04a23351-283d       paul
1    -1.0     2.0     trn-04a23351-283d       paul
2    -1.0     3.0     trn-04a23351-283d       paul
3    -1.0     4.0     trn-04a23351-283d       paul
4    -1.0     1.0      blz-412313we-333       paul
5    -1.0     2.0      blz-412313we-333       paul
6     0.0     3.0      blz-412313we-333       paul
7    -1.0     1.0        wha-111111-fff       paul
8     0.0     2.0        wha-111111-fff       paul
9     1.0     1.0         bz-0000-01101      chris
10    0.0     2.0         bz-0000-01101      chris
11   -1.0     1.0       1111-sawas-1221      chris
12   -1.0     2.0       1111-sawas-1221      chris
13    1.0     1.0      pppppppppppppppp      chris
14    1.0     2.0      pppppppppppppppp      chris
15    1.0     3.0      pppppppppppppppp      chris
16   -1.0     1.0     55555555555555555     philip
17   -1.0     2.0     55555555555555555     philip
18   -1.0     3.0     55555555555555555     philip
19   -1.0     1.0       333333333333333     philip
20   -1.0     2.0       333333333333333     philip
21   -1.0     3.0       333333333333333     philip
22    0.0     1.0          zz-222222222     philip
23   -1.0     2.0          zz-222222222     philip
24    0.0     1.0       f-32355261-ss3d      sarah
25   -1.0     2.0       f-32355261-ss3d      sarah
26    0.0     3.0       f-32355261-ss3d      sarah
27    0.0     1.0               adasdfs      sarah
28   -1.0     2.0               adasdfs      sarah
29    0.0     3.0               adasdfs      sarah

我想要:

        x      in            session_id    user_id
0     0.0     1.0     trn-04a23351-283d       paul
1    -1.0     2.0     trn-04a23351-283d       paul
2    -1.0     3.0     trn-04a23351-283d       paul
3    -1.0     4.0     trn-04a23351-283d       paul
4    -1.0     1.0      blz-412313we-333       paul
5    -1.0     2.0      blz-412313we-333       paul
6     0.0     3.0      blz-412313we-333       paul
7     1.0     1.0         bz-0000-01101      chris
8     0.0     2.0         bz-0000-01101      chris
9     1.0     1.0      pppppppppppppppp      chris
10    1.0     2.0      pppppppppppppppp      chris
11    1.0     3.0      pppppppppppppppp      chris
12   -1.0     1.0       333333333333333     philip
13   -1.0     2.0       333333333333333     philip
14   -1.0     3.0       333333333333333     philip
15    0.0     1.0          zz-222222222     philip
16   -1.0     2.0          zz-222222222     philip
17    0.0     1.0       f-32355261-ss3d      sarah
18   -1.0     2.0       f-32355261-ss3d      sarah
19    0.0     3.0       f-32355261-ss3d      sarah
20    0.0     1.0               adasdfs      sarah
21   -1.0     2.0               adasdfs      sarah
22    0.0     3.0               adasdfs      sarah

最佳答案

创建要合并的引用数据框

d = df[['session_id', 'user_id']].drop_duplicates()
d = d.groupby('user_id', as_index=False).apply(pd.DataFrame.sample, n=2)

df.merge(d)

      x   in        session_id user_id
0  -1.0  1.0  blz-412313we-333    paul
1  -1.0  2.0  blz-412313we-333    paul
2   0.0  3.0  blz-412313we-333    paul
3  -1.0  1.0    wha-111111-fff    paul
4   0.0  2.0    wha-111111-fff    paul
5   1.0  1.0     bz-0000-01101   chris
6   0.0  2.0     bz-0000-01101   chris
7  -1.0  1.0   1111-sawas-1221   chris
8  -1.0  2.0   1111-sawas-1221   chris
9  -1.0  1.0   333333333333333  philip
10 -1.0  2.0   333333333333333  philip
11 -1.0  3.0   333333333333333  philip
12  0.0  1.0      zz-222222222  philip
13 -1.0  2.0      zz-222222222  philip
14  0.0  1.0   f-32355261-ss3d   sarah
15 -1.0  2.0   f-32355261-ss3d   sarah
16  0.0  3.0   f-32355261-ss3d   sarah
17  0.0  1.0           adasdfs   sarah
18 -1.0  2.0           adasdfs   sarah
19  0.0  3.0           adasdfs   sarah

关于python - 对 pandas 中的群体进行采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50929841/

相关文章:

python-3.x - HTTP错误 : HTTP Error 403: urlib3 while using smopy

python - 为其他列中的每个唯一值查找列中唯一值的计数

python - 循环函数直到失败的最佳方法?

python - 从 url 检索图像或音频文件

python - 在输出中包括逗号、问号、感叹号(python)

python - StringIO 初始值必须是 str,而不是 Bytes

python - Pandas 将不规则的时间序列与不同的频率对齐

python - pandas DataFrame 不合并但不报错

python - pyparsing - 同一条语句的第二次执行抛出异常

python - 为组中的一个点格式化注释