Распределение элементов по процентной частоте - PullRequest
0 голосов
/ 07 января 2020

Есть ли в pandas, numpy или python какая-либо функция, которая может генерировать распределение частоты в соответствии с процентным значением, как мы можем сделать с EnumeratedDistribution в java.

Input:

values = [0, 1, 2]

percentage = [0.5, 0.30, 0.20]

total = 10

Выход:

[0, 0, 0, 0, 0, 1, 1, 1, 2, 2]

из 10 элементов, 50% состоит из 0, 30% состоит из 1 и 20% состоит из 2

Ответы [ 2 ]

1 голос
/ 07 января 2020

Без использования numpy, но только со списком:

values = [0, 1, 2]
percentage = [0.5, 0.30, 0.20]
total = 10

output = sum([[e]*int(total*p) for e,p in zip(values, percentage)], [])
1 голос
/ 07 января 2020

Вы можете использовать функцию numpy repeat() для повторения значений в values указанное количество раз (в процентах * от общего числа):

import numpy as np


values = [0, 1, 2]

percentage = [0.5, 0.30, 0.20]

total = 11

repeats = np.around(np.array(percentage) * total).astype(np.int8)  # [6, 3, 2]

np.repeat(values, repeats)

Вывод:

array([0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2])

Я использовал функцию np.around() для округления повторов, если они не являются целыми числами (например, если общее число равно 11, то 11*0.5 -> 6, 11*0.3 -> 3 и 11*0.2 -> 2).

...