我已经创建了以下Pandas Dataframe 。
import pandas as pd
import numpy as np
ds = {'col1' : [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
'col2' : [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]}
data = pd.DataFrame(data=ds)
看起来像这样
print(data)
col1 col2
0 1 0
1 1 0
2 1 0
3 1 0
4 1 0
5 1 0
6 1 0
7 1 0
8 1 0
9 1 0
10 1 0
11 1 0
12 1 0
13 1 0
14 2 1
15 2 1
16 2 1
17 2 1
18 2 1
19 2 1
20 2 1
21 2 1
22 2 1
23 2 1
24 2 1
25 2 1
26 2 1
27 2 1
我需要根据以下条件创建一个新列(名为col3
):
1.当col1 = 1
时,有14条记录的col2 = 0。新列(即col3
)需要有50%(正好是这14条记录的50%)的值等于col2
(随机分布在这14条记录中),其余50%等于1。
1.当col1 = 2
时,有14个记录的col2 = 1
。新列(即col3
)需要具有等于col2
(随机分布在14个记录上)的值的50%(正好这14个记录的50%),并且剩余的50%等于0。
因此,生成的数据集如下所示(请记住,col3
中值的位置或记录是随机分配的):
有人知道python代码来生成这样的 Dataframe 吗?
2条答案
按热度按时间zyfwsgd61#
groupby
+sample
结果
qyswt5oh2#
我将使用
df.sample()
方法随机隔离条件内的所有子组,然后赋值设置 Dataframe 并创建新的空列
现在让我们按条件选择
获取第一个条件的随机50%,然后获取剩余的50%
对于每个子组,将值设置为0或1
第二种情况-相同
应该够了。
运行1
运行2