Python pandas 随机生成20个整数且两两相加不相等

24 篇文章 2 订阅

问题背景:
现有一份EXCEL表格如下,左侧表格中的活动名称需以右侧表格为基础表格进行匹配。匹配条件为:左侧日期位于右侧开始时间结束时间范围内,且左侧商品名称与右侧商品名称一致。

在这里插入图片描述
由于出现了时间范围判断,这是我想到了使用EXCEL的lookup()函数来进行多条件匹配。这里的lookup()匹配的是最后一次满足条件的值,但是实际的需求是多值匹配,即如果右侧映射表中有多项满足匹配条件,左侧匹配结果应有多项,且lookup()函数运行较慢,如果数据量大的话,非常耗时间。
在这里插入图片描述
目前的解决方法是:
第一步:计算出左侧表格每一行记录在右侧表格中能够匹配成功的次数。
在这里插入图片描述
第二步:将右侧表格中的活动名称数值化(标准化),在左侧表格中使用sumifs()计算满足条件的活动名称标准值之和。
在这里插入图片描述
通过计算出来的和,再进一步分解出和所对应的两个加数(为什么是两个,而不是其他,因为在第一步中计算出来的最大值为2),再进一步通过加数反向匹配该数值对应的活动名称。
这里有一个必须要注意的一点就是,我们必须确保活动名称对应值两两相加和不相等,只有这样,才可以将sumifs()计算出来的和分解到两个加数,进而反向匹配成活动名称。

好了,终于讲到了标题部分,如何生成多个两两相加不相等的随机数值呢?我们以生成20个整数且两两相加不相等为例,生成脚本如下:

#生成20个值,两两相加不等
import random
import pandas

sum_obj=pd.DataFrame(columns=["和","值1","值2"],index=[0,1,2])
sum_obj.loc[0,"和"]=3
sum_obj.loc[0,"值1"]=2
sum_obj.loc[0,"值2"]=1
sum_obj.loc[1,"和"]=3
sum_obj.loc[1,"值1"]=2
sum_obj.loc[1,"值2"]=1
sum_obj.loc[2,"和"]=3
sum_obj.loc[2,"值1"]=2
sum_obj.loc[2,"值2"]=1
#只有21个整数两两相加的和均不相等的时候,才跳出当前循环
while len(sum_obj["和"])!=len(sum_obj["和"].drop_duplicates()):
    sum_obj=pd.DataFrame(columns=["和","值1","值2"])
    random_list=random.sample(range(1,10000),20)#随机生成1-100范围内的20个整数
    for i in np.arange(0,20):
        for j in np.arange(i,20):
            sum_value=random_list[i]+random_list[j]
            temp=[sum_value,random_list[i],random_list[j]]
            temp=pd.DataFrame(temp)
            temp=temp.T
            temp.rename(columns={0:"和",1:"值1",2:"值2"},inplace=True)
            sum_obj=sum_obj.append(temp)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值