如何在panda数据帧中均衡结果

2024-10-03 06:24:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用python在jupyter中工作,以便清理从分析软件中检索到的一组数据,我希望有相同数量的通过和失败的样本。基本上,我在pandas中的数据帧如下所示:

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)是可接受结果的两倍。你知道吗

不合格=8589不合格=16999 比率=1.979159389917336

我想要一个新的数据帧具有相同的通过率和失败率

我尝试了以下方法,但似乎不起作用:

import random
new_data = data[data.Accceptable <= random.random()*1/ratio]

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

有什么建议吗?你知道吗


Tags: 数据pandasdata数量软件jupytersectionarea
2条回答

您可以在列ACCEPTABLE中将数据分组后对其进行采样

data.groupby('Accceptable').sample(lambda x: x.sample(frac = 0.5))

试试这个:

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

相关问题 更多 >