2016-08-13 2 views
0

У меня есть кадр данных в питоне, содержащий следующую информацию:Как добавить столбец случайных чисел на основе двух условий?

Day   Type  
Weekday  1  
Weekday  2  
Weekday  3  
Weekday  1  
Weekend  2  
Weekend  1 

Я хочу, чтобы добавить новый столбец, генерации случайного числа Вейбуллу, но каждую пару «День» и «Тип» имеет уникальное распределение Вейбуллу ,

Например, я попытался следующие коды, но они не работали:

df['Duration'][ (df['Day'] == "Weekend") & (df['Type'] == 1) ] = int(random.weibullvariate(5.6/math.gamma(1+1/6),6)) 

df['Duration'] = df['Day','Type'].map(lambda x,y: int(random.weibullvariate(5.6/math.gamma(1+1/10),10)) if x == "Weekday" and y == 1 if x == "Weekend" and y == 1 int(random.weibullvariate(5.6/math.gamma(1+1/6),6))) 

ответ

1

Определить функцию, которая генерирует случайное число, которое Вы хотите, и применить его к строкам.

import io 
import random 
import math 
import pandas as pd 

data = io.StringIO('''\ 
Day   Type  
Weekday  1  
Weekday  2  
Weekday  3  
Weekday  1  
Weekend  2  
Weekend  1 
''') 
df = pd.read_csv(data, delim_whitespace=True) 

def duration(row): 
    if row['Day'] == 'Weekend' and row['Type'] == 1: 
     return int(random.weibullvariate(5.6/math.gamma(1+1/6),6)) 
    if row['Day'] == 'Weekday' and row['Type'] == 1: 
     return int(random.weibullvariate(5.6/math.gamma(1+1/10),10)) 

df['Duration'] = df.apply(duration, axis=1)