首页 > 解决方案 > 在 Python 中随机选择不同百分比的数据

问题描述

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)

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

标签: pandasdataframepython-3.6data-science

解决方案


这是您可以做的事情,您每次都需要一个函数来执行此操作。

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 

希望这可以帮助!非常感谢您的反馈:)


推荐阅读