首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据两个条件添加一列随机数?

如何根据两个条件添加一列随机数?
EN

Stack Overflow用户
提问于 2016-08-14 00:20:33
回答 1查看 114关注 0票数 0

我有一个python格式的数据框,其中包含以下信息:

代码语言:javascript
复制
Day         Type    
Weekday      1    
Weekday      2    
Weekday      3    
Weekday      1    
Weekend      2    
Weekend      1

我想通过生成一个威布尔随机数来添加一个新列,但是每对"Day“和"Type”都有一个唯一的威布尔分布。

例如,我尝试了以下代码,但它们不起作用:

代码语言:javascript
复制
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)))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-14 00:36:38

定义一个生成所需随机数的函数,并将其应用于行。

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38934684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档