首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pandas中的随机赋值

pandas中的随机赋值
EN

Stack Overflow用户
提问于 2017-12-29 01:51:16
回答 1查看 143关注 0票数 0

我正在尝试根据类别值的值随机分配第四个值(2种好友中的1种)。

为3个特征随机赋值的小df :类别、年龄和性别

代码语言:javascript
复制
        Unique_ID   Category    Age      Sex        Buddy  
0       0           2           11       male       NaN
1       1           3           7        female     NaN
2       2           1           4        male       NaN
3       3           2           20       male       NaN
4       4           1           19       female     NaN

我包含了生成df的代码,如果对回答有帮助的话

我已经做了一个函数来硬编码np.random.choice的概率,但在将assign_buddy函数应用于df ValueError时遇到错误消息:级数的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。

代码语言:javascript
复制
columns = ['Unique_ID',  'Category', 'Age', 'Sex', 'Buddy']
df = pd.DataFrame(columns=columns)

Sexes = ['female', 'male']
df.Sex = np.random.choice(a=Sexes, size=n, p=[0.6, 0.4])

list_Category = [1,2,3,4]
df.Category = np.random.choice(a=list_category, size=n, p=[0.3, 0.4, 0.2, 0.1])

buddy_list = ['buddy_1', 'buddy_2']

def assign_buddy(Category_prob_list):
"""
takes in a Category value
return: Buddy
"""    
    if  df['Category'] == list_Category[0]:
        df['Buddy'] = np.random.choice(a=buddy_list, size=n, p=[0.1, 0.9])
        return df['Buddy']
    elif df['Category'] == list_Category[1]:
        df['Buddy'] = np.random.choice(a=buddy_list, size=n, p=[0.3, 0.7])
        return df['Buddy']
    elif df['Category'] == list_Category[2]:
        df['Buddy'] = np.random.choice(a=buddy_list, size=n, p=[0.7, 0.3])
        return df['Buddy']
    elif df['Category'] == list_Category[3]:
        df['Buddy'] = np.random.choice(a=buddy_list, size=n, p=[0.9, 0.1])
        return df['Buddy']
    else:
        pass
# should apply assign_buddy to each row in df
df['Category'].apply((assign_buddy))  

我有一本assign_buddy的概率字典,但是尽管有这么多文档,我还是找不出映射和应用逻辑。

我尝试创建一个函数,返回d中的概率,并将其传递给np.random.choice中的参数p,但它不起作用。

代码语言:javascript
复制
# key is category label and values are probabilities for np.random.choice
d = {1: [0.1, 0.9], 2: [0.3, 0.7], 3: [0.7, 0.3], 4: [0.9, 0.1]}

任何有见地的人都很感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-29 02:33:14

尝尝这个

代码语言:javascript
复制
n = 20
columns = ['Unique_ID',  'Category', 'Age', 'Sex', 'Buddy']
df = pd.DataFrame(columns=columns)

list_category = [1,2,3,4]
buddy_list = ['buddy_1', 'buddy_2']
Sexes = ['female', 'male']
df.Sex = np.random.choice(a=Sexes, size=n, p=[0.6, 0.4])
df.Category = np.random.choice(list_category, size=n, p=[0.3, 0.4, 0.2, 0.1])

d = {1: [0.1, 0.9], 2: [0.3, 0.7], 3: [0.7, 0.3], 4: [0.9, 0.1]}

for val in list_category:
    sz = (df["Category"] == val).sum() # find the size for array to create
    # use `loc` to select places you want to replace
    df.loc[df["Category"] == val,'Buddy'] = np.random.choice(
                                               buddy_list, sz, p=d[val])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48012084

复制
相关文章

相似问题

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