我正在使用python进行jupyter工作,以清理从分析软件中检索到的一组数据,并且我希望通过和失败的样本数量相同。基本上我在熊猫中的数据帧看起来像这样:
grade section area_steel Nx Myy utilisation Accceptable
0 C16/20 STD R 700 350 4534 -310000 240000 0.313 0
1 C90/105 STD R 400 600 4248 -490000 270000 0.618 0
3 C35/45 STD R 550 400 1282 580000 810000 7.049 1
4 C12/15 STD R 350 750 2386 960000 610000 5.180 1
但是,不可接受的结果(1)是可接受的结果的两倍。
no_pass = 8589 no_fail = 16999 比= 1.979159389917336
我想要一个通过率和失败率相同的新数据框
我尝试了以下操作,但似乎不起作用:
import random
new_data = data[data.Accceptable <= random.random()*1/ratio]
似乎只计算了一个随机值,并对所有行进行了检查,而我希望每行一个值。
有什么建议吗?
答案 0 :(得分:0)
您可以在“可接受的”列上将数据分组后进行采样
data.groupby('Accceptable').sample(lambda x: x.sample(frac = 0.5))
答案 1 :(得分:0)
尝试一下:
import numpy as np
#to generate random sample
ratio = 1.979159389917336
no_fail = 16999
pass_to_choose = (data['Accceptable'] == 0)
#we want to choose all rows with Acceptable == 0
fail_to_choose = np.random.uniform(low = 0.0, high = 1.0, size = no_fail) < (1/ratio)
#randomly chosen 16999 bool values with relevant ratio of True and False
new_data = data[pass_to_choose]
#select all rows with Acceptable == 0
new_data = new_data.append(data[~pass_to_choose][fail_to_choose]).reset_index()
#add sampled rows with Acceptable == 1