Случайный выбор разных процентов данных в Python - PullRequest
0 голосов
/ 18 сентября 2018

Python начинающий, здесь. У меня есть набор данных с 101 строкой, который я импортировал в Python (как CSV-файл), используя Pandas. По сути, я хочу случайным образом сгенерировать число от 0 до 1 и, основываясь на результате, случайным образом выбрать процентный эквивалент из набора данных. Так, например, случайно сгенерированное число 0,89 потребует выбора 89% данных.

Я также хочу указать разные проценты, например, у меня одновременно выбраны 89%, 8% и 3% данных. Это сделано для того, чтобы я мог делать различные предположения на основе X% выбранных данных (например, для 3% выбранных строк печатать («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 голосов
/ 18 сентября 2018

Это то, что вы можете сделать, вам нужна функция, чтобы делать это каждый раз.

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 

Надеюсь, это поможет!Обратная связь высоко ценится :)

...