создать pandas dataframe со случайными целыми числами и конечной суммой по столбцам - PullRequest
0 голосов
/ 10 февраля 2019
df = pd.DataFrame(np.random.randint(0,6,size=(1200000, 3)), 
columns=list('ABC'))
df['sum'] = df[['A','B','C']].sum(axis=1)
df = df[df['sum']==5]
df = df.sample(n=100000)

Я хочу создать фрейм данных с тремя разными столбцами со случайными числами от 0 до 5, чтобы сумма по столбцу составляла 5.

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Вы можете проверить с помощью np.random.multinomial

np.random.multinomial(5, [1/3.]*3, size=5) # here when you input size 5 , it only creat 5 lines
Out[38]: 
array([[2, 2, 1],
       [1, 2, 2],
       [0, 3, 2],
       [1, 1, 3],
       [3, 1, 1]])

Завершить фрейм данных

ary=np.random.multinomial(5, [1/3.]*3, size=5)

df=pd.DataFrame(ary,columns=['A','B','C'])
df['SUM']=df.sum(1)
df
Out[43]: 
   A  B  C  SUM
0  1  2  2    5
1  2  2  1    5
2  1  3  1    5
3  1  1  3    5
4  1  2  2    5
0 голосов
/ 10 февраля 2019

Вы можете использовать перестановки itertools, чтобы найти числа от 0 до 5 с суммой, равной 5, и присвоить результат DataFrame

import itertools
df = pd.DataFrame([elem for elem in list(itertools.permutations(range(6), 3)) if sum(elem) == 5], columns = list('ABC'))
df['sum'] = df.sum(1)

    A   B   C   sum
0   0   1   4   5
1   0   2   3   5
2   0   3   2   5
3   0   4   1   5
4   1   0   4   5
5   1   4   0   5
6   2   0   3   5
7   2   3   0   5
8   3   0   2   5
9   3   2   0   5
10  4   0   1   5
11  4   1   0   5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...