在 pandas 中用随机函数赋值
assign value with stochastic function in pandas
我正在尝试根据类别值的值随机分配第四个值(2 种好友中的一种)。
具有 3 个特征随机分配值的小型 df:类别、年龄和性别
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:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
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 的 returns 概率传递给 np.random.choice 中的参数 p,但它不起作用。
# 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]}
感谢任何见解!
试试这个
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])
我正在尝试根据类别值的值随机分配第四个值(2 种好友中的一种)。
具有 3 个特征随机分配值的小型 df:类别、年龄和性别
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:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
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 的 returns 概率传递给 np.random.choice 中的参数 p,但它不起作用。
# 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]}
感谢任何见解!
试试这个
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])