根据条件创建随机选择的项目列表

Create list of randomly selected items based on criteria

我正在尝试根据他们的投资策略随机 select 一份基金列表。 例如,如果我有以下数据框:

FundName/Strategy

我想从每个策略类别中随机 select 2 只基金。我有18种策略和数千只基金。

我尝试了以下方法:

 Strategylist={'Activist', 'Macro'}

 for x in Strategylist:
     np.random.choice(df[df.loc[:,'Strategy']==x].FundName,2,replace=False)

理想情况下,每个策略的基金数量 select 是灵活的。例如,如果我们 select:

Strategy/of 资金

然后每次,我 运行 循环我会得到一个独特的随机 select ion of funds with 2 random activity funds and 1 random macro funds such as Fund1, Fund3, Fund6

设置代码

funds = ["Fund{}".format(i+1) for i in range(7)]
strategies = ['Activist']*4 + ['Macro']*3
df = pd.DataFrame(list(zip(funds, strat)), columns=('FundName', 'Strategy'))

您可以从数据框中获取策略列表

all_strategies = set(df['Strategy'])

然后您可以获得与给定策略匹配的所有基金名称,如下所示:

my_fund_names = df[df['Strategy']=='Activist']['FundName'].values

就像您的问题一样,您可以使用 np.random.choice 从 my_fund_names 到 select。