Панды - заполнение столбца панд случайной нормальной переменной средним значением из другого столбца - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть данные, которые выглядят так:

Mean
4.5
5.6
3.5
6.7

Я хотел бы использовать np.random.normal() для построения случайной нормальной переменной с использованием среднего столбца, который производит что-то вроде этого (очевидно,случайные числа будут отличаться каждый раз):

Mean  RV
4.5   6.2
5.6   3.1
3.5   4.3
6.7   5.6

Я пробовал что-то вроде этого: df['RV'] = np.random.normal(df['Mean'], 3.2, 1)

, но безуспешно.Может быть, lambda был бы здесь полезен?Любая помощь будет оценена.

Ответы [ 3 ]

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

Передать столбец в np.random.normal для увеличения производительности:

df['RV'] = np.random.normal(df['Mean'])
print (df)
   Mean        RV
0   4.5  4.138135
1   5.6  6.285609
2   3.5  4.073761
3   6.7  6.987728
0 голосов
/ 01 февраля 2019

Использование np.random.normal напрямую, чтобы воспользоваться векторными операциями numpy, намного быстрее, чем использование функции apply от panda:

import numpy as np
import pandas as pd

df = pd.DataFrame({
        'Mean': np.arange(0., 1000000., 1.),
        'StdDev': np.arange(0., 1000000., 1.)/1000000. + 1.,
})

df['RV'] = np.random.normal(loc=df['Mean'], scale=df['StdDev'])

Для фрейма данных с 1M строками этот подход выполняется на моем компьютере примерно за 60 мскомпьютер, против 2 секунд для применения подхода, то есть примерно в 30 раз быстрее.

Я не вижу причин, почему это не сработало бы в вашем случае.

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

Вы можете применить np.random.normal вдоль значений Серии, используя каждое значение в качестве среднего значения нормального распределения.Обновлен код с предложением @jpp, так как здесь не требуется использование функции lambda, поскольку среднее значение - это первый параметр, который принимает функция:

import numpy as np
df.assign(RV= df.Mean.apply(np.random.normal))

    Mean        RV
0   4.5  5.743574
1   5.6  4.910578
2   3.5  1.853348
3   6.7  7.061648
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...