如何在熊猫数据框中均衡结果

时间:2019-01-06 19:10:22

标签: python pandas

我正在使用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]

似乎只计算了一个随机值,并对所有行进行了检查,而我希望每行一个值。

有什么建议吗?

2 个答案:

答案 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