某公司年会设有抽奖环节,奖品设有三个等级:一等奖一名,二等奖两名,三等奖三名。要求一个人只能中一次奖。
代码实现方法一:
先构造数据:
import pandas as pd
import faker
f=faker.Faker('zh-cn')
df=pd.DataFrame([f.name() for i in range(50)],columns=['name'])
df['等级']=''
df
抽奖时执行代码:
win_info=(3,'三等奖') #配置信息,第一位为抽奖人数,第二位为奖项等级
filter=df.index.isin(df.sample(win_info[0]).index)&-(df.等级.isna()) #创建一个筛选器变量
df.loc[filter,'等级']=win_info[1] #执行抽奖,奖等级写入
df.loc[df.等级==win_info[1]] #显示本次抽奖结果
win_info=(2,'二等级')
filter=df.index.isin(df.sample(win_info[0]).index)&~(df.等级.isna())
df.loc[filter,'等级']=win_info[1]
df.loc[df.等级==win_info[1]]
win_info=(1,'一等级')
filter=df.index.isin(df.sample(win_info[0]).index)&~(df.等级.isna())
df.loc[filt