Python 基于随机变量的值为数据帧列赋值

Python 基于随机变量的值为数据帧列赋值,python,dataframe,conditional-statements,assign,Python,Dataframe,Conditional Statements,Assign,我有这样一个数据帧: df=pd.DataFrame(列=['count','color']) 对于计数大于0的每一行,我想为颜色指定“红色” np.随机二项(1,prob)==1 我知道如何使用for循环。 我还知道,如果没有这个条件,我可以在不使用for循环的情况下指定红色,方法如下: df.loc[df['count']>0,['color']]='red' 在没有for循环的情况下,是否可以同时启用过滤器on count和prob条件 df.loc[lambda x: (x['co

我有这样一个数据帧:

df=pd.DataFrame(列=['count','color'])
对于计数大于0的每一行,我想为颜色指定“红色”

np.随机二项(1,prob)==1
我知道如何使用for循环。 我还知道,如果没有这个条件,我可以在不使用for循环的情况下指定红色,方法如下:

df.loc[df['count']>0,['color']]='red'
在没有for循环的情况下,是否可以同时启用过滤器on count和prob条件

df.loc[lambda x: (x['count'] > 0) & (np.random.binomial(1, prob)==1), 'color'] = 'red'

您可以执行以下操作:

reds = np.where(d['counts']>1)[0]            # indices of red elements
probs = np.random.binomial(1,0.2, len(reds)) # probs to be assigned to red elements

# assign
d.loc[reds, "color"] = ['red' if i==1 else 'blue' for i in probs]
我假设数据与这里生成的数据类似

a = np.random.randint(0,10,100)
b = ['blue']*100
d = pd.DataFrame(np.vstack([a,b]).T, columns=['counts','color'])
d.loc[:,'counts'] = d.loc[:,'counts'].astype(int)
您可以这样做:

reds = np.where(d['counts']>1)[0]            # indices of red elements
probs = np.random.binomial(1,0.2, len(reds)) # probs to be assigned to red elements

# assign
d.loc[reds, "color"] = ['red' if i==1 else 'blue' for i in probs]
我假设数据与这里生成的数据类似

a = np.random.randint(0,10,100)
b = ['blue']*100
d = pd.DataFrame(np.vstack([a,b]).T, columns=['counts','color'])
d.loc[:,'counts'] = d.loc[:,'counts'].astype(int)

在二项分布中使用单一试验是没有意义的。对于计数>0的行,您应该只使用布尔值。我的目的是将颜色指定给具有给定prob的红色,仅指定给计数>0的行。在for循环中,我对count>0的每一行运行了一次试验,结果似乎有效。在二项分布中使用一次试验是没有意义的。对于计数>0的行,您应该只使用布尔值。我的目的是将颜色指定给具有给定prob的红色,仅指定给计数>0的行。在for循环中,我对count>0的每一行运行了一次测试,它似乎有效。在我看来,对count>0的所有行,随机条件只计算一次。我需要对与计数条件匹配的每一行分别求值。我已更新代码以使用lambda函数。这对你有用吗?是的!谢谢。在我看来,对于计数>0的所有行,随机条件只计算一次。我需要对与计数条件匹配的每一行分别求值。我已更新代码以使用lambda函数。这对你有用吗?是的!非常感谢。