在Python中随机选择不同百分比的数据

时间:2018-09-18 12:25:38

标签: pandas dataframe python-3.6 data-science

Python初学者,在这里。我有一个包含101行的数据集,该数据集已使用Pandas导入到Python(作为csv文件)中。我本质上是想随机生成一个介于0和1之间的数字,并根据结果从数据集中随机选择等效百分数。因此,例如,随机生成的数字0.89将需要选择89%的数据。

我还想指定不同的百分比,以使我拥有例如一次随机选择的数据的89%,8%和3%。这样一来,我可以根据已选择数据的X%做出不同的假设(例如,对于3%的行选择print('A'),等等)。我终于想对整个过程进行几次模拟并存储结果。

我一直在尝试使用不同类型的代码,例如df.sample(frac = 0.89)等,但是我不确定如何扩展该代码以同时选择不同的百分比。

我当前的代码是:

import random 
import pandas import pandas as pd 

df = pd.read_csv(r'R_100.csv', encoding='cp1252') 
df_1 = df['R_MD'].sample(frac=0.8889) 
Total = df['PR_MD'].sum() 
print(df_1, 'Total=', Total)

任何建议都非常感谢。提前致谢。

1 个答案:

答案 0 :(得分:0)

这是您可以做的事,您每次都需要一个函数来做。

import pandas as pd 
df = pd.read_csv(r'R_100.csv', encoding='cp1252')

读取数据框后

def frac(dataframe, fraction, other_info=None):
    """Returns fraction of data"""
    return dataframe.sample(frac=fraction)

此处other_info可以是特定的列名,然后根据需要多次调用该函数

df_1 = frac(df, 0.3)

它将为您返回一个新的数据框,您可以将其用于所需的任何内容,就像我从示例中推断的那样,您可以使用类似的数据

import random

def random_gen():
    """generates random number"""
    return random.randint(0,1)




def print_sum(column_name):
    """Prints sum"""

    # call the random_gen() to give out a number
    rand_num = random_gen()

    # pass the number as fraction parameter to frac()
    df_tmp = frac(df, rand_num)

    print(df_tmp[str(column_name)].sum())

或者,如果您想要

  

但是我不确定如何扩展此范围以同时选择不同的百分比。

然后按如下所示更改print_sum

def print_sum(column_name):
    """returns result for 10 iterations"""
    # list to store all the result
    results = []

    # selecting different percentage fraction 
    # for 10 different random fraction or you can have a list of all the fractions you want
    # and then for loop over that list
    for i in range(1,10): 
       # generate random number
       fracr = random_gen()
       # pass the number as fraction parameter to frac()
       df_tmp = frac(df, fracr)
       result.append(df_tmp[str(column_name)].sum())

    return result 

希望这会有所帮助!反馈非常感谢:)